Flask框架从入门到精通之模型创建与添加(十二)

栏目: Python · 发布时间: 6年前

内容简介:在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用commit()方法提交会话。数据库会话是为了保证数据的一致性,避免因部分更新导致数据不一致。提交操作把会话对象全部写入数据库,如果写入过程发生错误,整个会话都会失效。数据库会话也可以回滚,通过db.session.rollback()方法,实现会话提交数据前的状态。

在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用commit()方法提交会话。

数据库会话是为了保证数据的一致性,避免因部分更新导致数据不一致。提交操作把会话对象全部写入数据库,如果写入过程发生错误,整个会话都会失效。

数据库会话也可以回滚,通过db.session.rollback()方法,实现会话提交数据前的状态。

二、创建模型类

我们用王者荣耀类型和英雄中的关系来创建模型类。比如射手类型对应了很多英雄:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql

pymysql.install_as_MySQLdb()
app = Flask(__name__)
# 设置连接数据库的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@127.0.0.1:3306/db_flask'

# 设置每次请求结束后会自动提交数据库中的改动
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

# 数据库和模型类同步修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 查询时会显示原始 SQL 语句
app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)


# 类型
class Type(db.Model):
    # 表名
    __tablename__ = 'tbl_types'

    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(32), unique=True)  # 名字

    # 数据库中不存在的字段,只是为了查找和反向查找。
    # backref:在关系的另一模型中添加反向引用
    heros = db.relationship("Hero", backref='type')


# 英雄
class Hero(db.Model):
    # 表名
    __tablename__ = 'tbl_heros'
    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(64), unique=True)  # 名字
    gender = db.Column(db.String(64))  # 性别

    # 外键 一个射手对应很多英雄
    type_id = db.Column(db.Integer, db.ForeignKey("tbl_types.id"))
复制代码

三、创建表和添加数据

上面我们已经提到在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。

if __name__ == '__main__':
    # 0.0.0.0代表任何能代表这台机器的地址都可以访问
    # app.run(host='0.0.0.0', port=5000)  # 运行程序

    db.drop_all()  # 清楚数据库所有数据 只试用第一次运行
    db.create_all()  # 创建表

    type1 = Type(name='射手')
    db.session.add(type1)  # 添加到会话
    db.session.commit()  # 提交

    type2 = Type(name='坦克')
    db.session.add(type2)
    db.session.commit()

    type3 = Type(name='法师')
    type4 = Type(name='刺客')
    db.session.add_all([type3, type4])  # 添加多个
    db.session.commit()

    hero1 = Hero(name='后羿', gender='男', type_id=type1.id)
    hero2 = Hero(name='程咬金', gender='男', type_id=type2.id)
    hero3 = Hero(name='王昭君', gender='女', type_id=type3.id)
    hero4 = Hero(name='安琪拉', gender='女', type_id=type3.id)
    hero5 = Hero(name='兰陵王', gender='男', type_id=type4.id)

    db.session.add_all([hero1, hero2, hero3, hero4, hero5])  # 添加多个
    db.session.commit()
复制代码

我们登入本地数据库查看一下:

Flask框架从入门到精通之模型创建与添加(十二)

查询英雄类型:

Flask框架从入门到精通之模型创建与添加(十二)

查询英雄:

Flask框架从入门到精通之模型创建与添加(十二)

欢迎关注我的公众号:

Flask框架从入门到精通之模型创建与添加(十二)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning ASP.NET 4 in C# and Vb

Beginning ASP.NET 4 in C# and Vb

Imar Spaanjaars / Wrox / 2010-3-19 / GBP 29.99

This book is for anyone who wants to learn how to build rich and interactive web sites that run on the Microsoft platform. With the knowledge you gain from this book, you create a great foundation to ......一起来看看 《Beginning ASP.NET 4 in C# and Vb》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换