内容简介:在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() 复制代码
我们登入本地数据库查看一下:
查询英雄类型:
查询英雄:
欢迎关注我的公众号:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Genesis框架从入门到精通(7): 框架的过滤器
- Genesis框架从入门到精通(10): 样式函数
- Flask框架从入门到精通之扩展脚本(十五)
- Flask框架从入门到精通之模型查询(十三)
- Flask框架从入门到精通之Response(七)
- Flask框架从入门到精通之Request(六)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
零售的哲学:7-Eleven便利店创始人自述
[日] 铃木敏文 / 顾晓琳 / 江苏文艺出版社 / 2014-12-1 / 36
全球最大的便利店连锁公司创始人——铃木敏文,结合40多年零售经验,为你讲述击中消费心理的零售哲学。铃木敏文的很多创新,现在已经成为商界常识,本书把那些不可思议的零售创新娓娓道来。关于零售的一切:选址、订货、销售、物流、管理……他一次又一次地在一片反对声中创造出零售界的新纪录。 翻开本书,看铃木敏文如何领导7-11冲破层层阻碍,成为世界第一的零售哲学。一起来看看 《零售的哲学:7-Eleven便利店创始人自述》 这本书的介绍吧!
Base64 编码/解码
Base64 编码/解码
RGB HSV 转换
RGB HSV 互转工具