当前位置: 首页 > news >正文

flask-sqlalchemy中的flush()

1. 示例:直观理解 flush() 的作用

假设定义了一个User模型(包含自增id、name字段),通过示例看flush()的行为:

python
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db"  # 示例用SQLite
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 自增IDname = db.Column(db.String(50))# 1. 创建新用户对象(仅在本地内存,未执行SQL)
new_user = User(name="Alice")
db.session.add(new_user)  # 将对象加入会话(仍未执行SQL)
print(new_user.id)  # 输出: None(此时ID未生成,因为未与数据库交互)# 2. 执行flush():同步到数据库,执行INSERT SQL,但不提交事务
db.session.flush()  
print(new_user.id)  # 输出: 1(数据库生成自增ID,同步回本地对象)# 3. 此时查看数据库(如用SQLite工具):事务未提交,看不到这条新数据
# (其他会话查询`User`表,也不会出现Alice)# 4. 执行commit():提交事务,永久保存数据
db.session.commit()  
# 此时再查数据库:能看到Alice的记录,其他会话也能查询到

2. 为什么 flush() 执行了 SQL 仍看不到?

你可能疑惑:db.session.flush() 已经执行了 INSERT SQL,为什么新事务还是查不到?这是因为 flush() 的本质是 “同步本地操作到数据库”,但不提交事务——PostgreSQL 中,即使执行了 INSERT 语句,只要事务未提交,该语句产生的变更就属于 “事务私有数据”,仅当前事务可见,其他事务(无论何时开启)都无法访问。
只有执行 db.session.commit() 后,事务才会 “持久化” 变更,此时其他新事务(或已开启但未执行查询的事务)才能看到这条数据。

3. 注意事项

仅在事务中有效:flush() 依赖数据库事务(Flask-SQLAlchemy 默认开启事务),若事务已回滚(rollback()),flush() 的效果会被撤销;

性能影响:频繁flush()会增加与数据库的交互次数(每次flush()都走一次网络 / IO),批量操作时需权衡;

不同数据库行为一致:无论使用 SQLite、MySQL、PostgreSQL,flush()的核心逻辑(执行 SQL 但不提交)均统一,由 SQLAlchemy 底层适配。
综上,db.session.flush() 是 “执行 SQL 但暂存事务” 的操作,核心价值是在不永久保存数据的前提下,同步本地操作到数据库并获取必要的反馈(如自增 ID)。

4. 扩展

PostgreSQL 默认的事务隔离级别是 Read Committed(读已提交)
Mysql 默认的事务隔离级别是 repeatable Read(可重复读)

http://www.dtcms.com/a/449087.html

相关文章:

  • 娱乐建设网站中国航天科工集团有限公司
  • 分布式系统相关概念(单体、集群、分布式、分布式集群、微服务)
  • vscode 配置使用pyqt5
  • CSS选择器常见用法
  • 【Docker】Windows Docker 完全入门指南:从安装到实战的全流程记录
  • 从零开始的C++学习生活 4:类和对象(下)
  • 温州做网站优化网站设计培训
  • 18网站推广关于旅行的网站怎样做
  • 做网站赚钱还是企业宣传片推广方案万能模板
  • 视频分享网站怎么做的注册营业执照需要什么资料
  • 网站建设教程赚找湖南岚鸿认 可php无版权企业网站管理系统
  • 建立网站站点的目的一个主机可以做几个网站域名
  • 封面上的网站怎么做网站模块设计软件
  • 网站制作还花钱电子商务网站建设及推广方案论文
  • 淮南服装网站建设地址如何做虚拟币交易网站
  • 网站建设规划表乐清网站建设lonwap
  • 网站开发创业计划书模板网上能免费做网站发布叼
  • 湖南张家界建设局网站深圳本地招聘网站有哪些
  • 分析网站建设前期的seo准备工作广东网络文明大会开幕
  • 贵州城乡和住房建设厅网站天津seo方案
  • 青岛php网站建设wordpress可以做博客么
  • 智能建站技术自己注册了个域名想做一个网站
  • 做网页游戏网站需要什么做的网站必须放
  • 乐清网站网络公司wordpress 登陆不了
  • 淘宝作图在哪个网站上做图最专业网站建设开发
  • 公司电商网站建设方案模板百度怎么优化关键词排名
  • 短租网站那家做的好处建造网站
  • 公司网站推广费用运营软件有哪些
  • 智能网站建设步骤免费培训机构管理系统
  • 公司网站建设属于软件销售wordpress默认主题 xss