SQLAlchemy中flush和commit的区别

Flush和Commit的区别

  1. Commit操作比较好理解,就是提交一次事务Transaction操作。既然是提交一次事务操作,就包含了增删改的SQL操作。所以必然是Session通过Connection进行写磁盘I/O的操作。
  2. Flush不同的是,它并没有真正的执行事务Transaction的操作,而是更新了数据库的事务缓存[1]。所以Flush是会和数据库进行通信的。Flush操作告知数据库把事务操作缓存在数据库,直到数据库收到了Commit操作之后才会真正将操作更新到磁盘中[5]。

You may flush() as often as you like within a transaction to move changes from Python to the database’s transaction buffer.

  1. Flush方法会生成Primary Key,所以哪怕Flush之后并不进行Commit操作,Primary Key也还是会生成。所以下一次Insert一条记录时,Primary Key会再次加1.
  2. 通常如果我们希望在Commit之前获取到待插入数据的自增主键,那我们可以在Commit之前进行Flush操作。这时SQLAlchemy的对象就会获取到数据库生成待对应数据行的主键值[4]。
  3. Session在进行查询时(查询操作之前)会进行一次Flush操作。所以创建了对象,虽然并没有提交,但是紧接着进行Query操作也能在当前Session中查询到这个对象[2]。
  4. Flush之后就能在当前Session中看到效果,而Commit之后才能在其他Session中看到效果[3]。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值