首頁  >  問答  >  主體

python - SQLAlchemy 中的使用 flush() 和 commit() 有什么区别

commit()flush() 实现的功能都一样,为什么两个要写两种,有什么特殊的区别呢?

PHP中文网PHP中文网2741 天前826

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:42:32

    誰說這兩個東西的功能一樣了?
    在SQLAlchemy中一個Session(可以看作)是一個transaction,每個操作(基本上)對應一條或多條SQL語句,這些SQL語句需要發送到資料庫伺服器才能被真正執行,而整個transaction需要commit才能真正生效,如果沒提交,一旦你的程式掛了,所有未提交的事務都會被回滾到事務開始之前的狀態。
    flush就是把客戶端尚未傳送到資料庫伺服器的SQL語句寄過去,commit就是告訴資料庫伺服器提交交易。
    簡單說,flush之後你才能在這個Session中看到效果,而commit之後你才能從其它Session中看到效果。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:42:32

    功能不一樣。
    簡單說:
    flush預先提交,等於提交到資料庫內存,還未寫入資料庫檔案;
    commit就是把記憶體裡面的東西直接寫入,可以提供查詢了;

    回覆
    0
  • 取消回覆