zoukankan      html  css  js  c++  java
  • SQLAlchemy中flush和commit的区别

    commit()会先调用flush()清理缓存,然后提交事务;
    flush()只清理缓存,不提交事务

    Commit操作比较好理解,就是提交一次事务Transaction操作。既然是提交一次事务操作,就包含了增删改的SQL操作。所以必然是Session通过Connection进行写磁盘I/O的操作。
    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.

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

    Flush之后就能在当前Session中看到效果,而Commit之后才能在其他Session中看到效果[3]。

    总结:
    1. flush会生成primary key
    2. 当前紧接着的session可以查到flush做的增删改的结果
    3. 其他session只有在commit之后,才能查到flush做的增删改结果

     

    参考链接:

    https://www.cnblogs.com/zhanghaibin16/p/13271672.html?utm_source=tuicool

  • 相关阅读:
    攻防世界-进阶-1-re4-unvm-me
    攻防世界-reverse-7(game)
    攻防世界-reverse-4.5.6
    20199312 2019-2020-2 《网络攻防实践》第6周作业
    攻防世界-reverse-1.2.3
    pwndbg+kali 爬坑
    第五课 实践验收
    20199315 2019-2020-2 《网络攻防实践》第5周作业
    实践三 网络嗅探与协议分析
    20199315 2019-2020-2 《网络攻防实践》第4周作业
  • 原文地址:https://www.cnblogs.com/neozheng/p/14149960.html
Copyright © 2011-2022 走看看