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

fastapi 中的db.add db.comit db.flush db.refresh都是什么意思 有顺序吗

在 FastAPI 中,db.adddb.commitdb.flushdb.refresh 其实是 SQLAlchemy ORM(数据库工具) 中「会话(Session)」的方法(db 通常是 SQLAlchemy 会话的实例),用于操作数据库。它们的作用和顺序与数据库事务、对象状态管理密切相关,下面逐一解释:

1. db.add(obj)

作用:将一个「数据库模型对象」添加到当前会话(Session)中,标记为「待提交」状态。

  • 此时对象只是被「暂存」在会话中,并未真正写入数据库
  • 适用于「新增数据」:比如创建一个 User 实例,通过 db.add(user) 告诉会话 “这个对象需要被保存到数据库”。

2. db.flush()

作用:将当前会话中所有「待提交的更改」(包括新增、修改、删除)发送到数据库执行,但不提交事务

  • 执行后,数据库会真正执行 SQL 语句(比如 INSERT/UPDATE),生成自增 ID、默认值等(如果有),但这些更改还处于「事务未确认」状态(可以被回滚)。
  • 用途:如果需要在提交事务前获取数据库生成的字段(比如自增 ID),可以先 flush,此时内存中的对象会同步数据库生成的值。

3. db.commit()

作用:提交当前事务,将 flush 到数据库的所有更改「永久保存」到数据库,事务结束。

  • 只有 commit 后,新增的数据才会被真正写入数据库,其他事务才能看到这些更改。
  • 如果不 commit,会话关闭后,所有 add 或 flush 的更改会被自动回滚(丢失)。

4. db.refresh(obj)

作用:从数据库中重新加载对象的最新数据,同步到内存中的对象实例。

  • 比如:新增对象被 commit 后,数据库可能自动生成了 create_time 字段,通过 db.refresh(obj) 可以将这个字段的值同步到内存中的 obj 里。
  • 或者:当对象在数据库中被其他操作修改后,用 refresh 可以获取最新状态。

执行顺序(以「新增数据」为例)

通常的流程是:

python

运行

# 1. 创建模型对象
user = User(name="张三", age=20)# 2. 将对象添加到会话(标记为待提交)
db.add(user)# 3. (可选)如果需要提前获取数据库生成的ID等字段,先flush
db.flush()  # 此时数据库执行INSERT,user.id会被赋值(如果是自增ID)# 4. 提交事务,永久保存到数据库
db.commit()# 5. (可选)同步数据库自动生成的字段(如create_time)到内存对象
db.refresh(user)

关键区别总结

方法核心作用是否写入数据库是否提交事务
db.add标记对象为待提交
db.flush执行 SQL 但不提交事务,同步临时结果是(临时)
db.commit提交事务,永久保存所有更改是(永久)
db.refresh从数据库同步最新数据到内存对象否(只读)

简单说:add 是 “告诉会话要保存什么”,flush 是 “先让数据库临时执行一下”,commit 是 “确认保存,生效”,refresh 是 “更新内存对象为数据库最新状态”。顺序上,add 通常在最前,commit 是最终确认,flush 和 refresh 按需插入中间。

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

相关文章:

  • 网站301设置上海百度推广排名
  • 免费做店招哪个网站好新站网站推广该如何做
  • 宝安三网合一网站建设佛山外贸网站建设机构
  • 打工人日报#20251113
  • 高压直流270V电源:无人机地面起动概述
  • 华建建设集团网站网站运营方法
  • java 全景图切片处理,前端用pannellum框架加载
  • 嵌入式开发核心题全解析
  • 营销型企业网站系统模板下载重庆宣传片制作
  • IDEA多java版本切换
  • phpcms校园网站厦门网站制作软件
  • 网站推广有什么方法wordpress电影广告插件
  • 广州的一起做网站自己做的网站打不开怎么搞
  • 2025 多场景运营:用 PageAdmin+QuickSSO 搭建站群,1 套认证管 N 个站点
  • AI解锁物流:文档抽取重塑供应链效率
  • 第12篇 EntryPointNotFoundException: 无法在 DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点
  • FT8783ND1低成本5V2A电源芯片方案替代LP3783A(轻松过EMC,过认证)
  • 手表官方网站小程序登录失败是什么原因
  • 本地部署个人仪表板 SimpleDash 并实现外部访问
  • 百色市右江区了建设局网站什么网站可以做邮件列表
  • 交换机路由器基础(四)--TCPIP四层模型及常见协议技术
  • 为什么要建设旅游网站网站开发工作容易出现的失误
  • 做外贸站推广wordpress怎么换空间
  • 使用wordpress做图站百度官网app
  • HCIP-IoT/H52-111 真题详解(章节A),行业解决方案与华为云 /Part1
  • 东莞网站建设设计公司哪家好excel表如何做网站连接
  • 螺杆支撑座类型与工况匹配场景
  • 算法与数据结构之二叉树(Binary Tree)
  • 算法笔记 11
  • 网站开发技术考题如何学建设网站