有沒有人知道SQLAlchemy中session.commit()
和session.flush()
之間的主要區別是什麼?從the documentationsession.commit()和session.flush()之間的區別是什麼?
19
A
回答
15
以下是documentation的一些相關引用。
沖洗:
當
Session
使用其默認配置,沖洗 步驟幾乎都是透明完成的。具體來說,沖洗 出現在任何單個查詢發出之前,以及commit()
調用之前發生的事務提交。
提交:
commit()
用於提交當前事務。 它總是預先發出flush()
以將任何剩餘狀態清除到數據庫;此 獨立於「自動刷新」設置。如果目前沒有交易 ,則會引發錯誤。請注意,會話的默認行爲是「交易」始終存在;通過設置autocommit=True
可以禁用此行爲 。在自動提交模式下,可以通過調用begin()
方法啓動 交易。
4
直:
commit()
用於提交當前事務。它總是事先發出flush()
以將任何剩餘狀態清除到數據庫。
9
我知道該怎麼解釋這是什麼做的最簡單的方法是隻告訴你,使用echo=True
:
>>> session.flush()
BEGIN (implicit)
INSERT INTO users (username, password) VALUES (?, ?)
('alice', None)
>>> session.commit()
COMMIT
>>>
flush()
導致數據被髮送到數據庫。 commit()
導致COMMIT
,它告訴數據庫保留剛剛發送的數據。正如其他人所說,如果需要,commit()
也將導致發生flush()
。
3
雖然上述答案是正確的,但flush的最有用的功能是將對數據庫中的表所做的更改應用到代碼中的相關對象中。下面是一個例子, 假設你註冊一個用戶,你想給回他的身份證,
u = User(name,address,phone) #id is autogenerated
session.add(u)
session.commit() #calls flush beforehand, but we need it after the commit
session.flush() #updates the objects of the session
print(u.id) #id field of the User object updated after the flush
您不必再查詢得到他的ID!希望這有助於
0
flush()
將保存在存儲器中的對象/對象的當前狀態同步您的數據庫,但它不提交事務。因此,如果您在調用flush()
後遇到任何異常,那麼交易將被回滾。 您可以使用flush()
同步數據庫與小塊數據,而不是使用commit()
立即提交大量數據,並面臨獲取異常的風險。
commit()
將使數據庫中的數據永久存儲。一旦commit()
成功,您無法回滾您的交易。
相關問題
- 1. ++和:haskell之間的區別是什麼?
- 2. $(())和expr之間的區別是什麼?
- 3. $(...)和`...`之間的區別是什麼
- 4. [undefined]和[,]之間的區別是什麼?
- 5. 區別:%% a和%variable%變量之間的區別是什麼?
- 6. MVC和MVVM之間的區別和相似之處是什麼?
- 7. TVF/UDF之間的區別是什麼
- 8. [EmailPasswordAuthProvider,EmailAuthProvider]之間的區別是什麼
- 9. dpm()和dsm()之間有什麼區別?
- 10. @dynamic和@synthesize之間有什麼區別?
- 11. vbNullString和「」之間有什麼區別嗎?
- 12. * zoom和zoom之間有什麼區別?
- 13. String.Concat,string.format和+之間有什麼區別?
- 14. StaticLayout和DynamicLayout之間有什麼區別
- 15. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之間有什麼區別?
- 16. :: after和after之間有什麼區別?
- 17. %.02f和%.2f之間有什麼區別?
- 18. {$ var}和$ var之間有什麼區別?
- 19. ReleaseFloatArrayElements和DeleteLocalRef之間有什麼區別
- 20. {0}和「」之間有什麼區別?
- 21. getA()和this.getA()之間有什麼區別?
- 22. @observable和@published之間有什麼區別
- 23. $ {}和#{}之間有什麼區別?
- 24. url.getFile()和getpath()之間有什麼區別?
- 25. KVC和Properties之間有什麼區別?
- 26. Lazy.Force()和Lazy.Value之間有什麼區別
- 27. 「層」和「層」之間有什麼區別?
- 28. 1.1em和1.05em之間有什麼區別?
- 29. proc和lambda之間有什麼區別?
- 30. ViewFlipper和ViewSwitcher之間有什麼區別
哪方面的文件(「沖洗」和「承諾」,在http://www.sqlalchemy.org/docs/orm/session.html#flushing)的你覺得還不清楚? – NPE