内容简介:在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(六)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
html转js在线工具
html转js在线工具