누구나 session.commit()
과 session.flush()
의 주된 차이점은 SQLAlchemy에 무엇입니까? the documentation에서session.commit()과 session.flush()의 차이점은 무엇입니까?
답변
다음은 documentation의 관련 인용문입니다.
플러시는 다음 Session
가 기본 구성으로 사용됩니다
, 플러시 단계는 거의 항상 투명하게 이루어집니다. 특히 플러시 은 트랜잭션이 커밋되기 전에
commit()
호출 내에서뿐만 아니라까지 발생합니다.
는 커밋 : 현재 트랜잭션을 커밋하는 데 사용됩니다
commit()
. 항상 데이터베이스에 남아있는 상태를 플러시하기 위해flush()
을 발행합니다.; 이 은 "autoflush"설정과 독립적입니다. 트랜잭션이 없으면 오류가 발생합니다. 세션의 기본 동작은 "트랜잭션"이 항상 존재한다는 것입니다. 이 동작은autocommit=True
으로 설정하여 을 비활성화 할 수 있습니다. 자동 커밋 모드에서 트랜잭션을 호출하려면begin()
메서드를 호출하면됩니다.
스트레이트
commit()
는 현재 트랜잭션을 커밋하는 데 사용됩니다. 항상flush()
을 발행하여 데이터베이스에 남아있는 모든 상태를 플러시합니다.
나는이하는 일을 설명하는 방법을 알고있는 가장 쉬운 방법은 echo=True
를 사용하여, 당신이 단지를 보여주는 것입니다 :
>>> session.flush()
BEGIN (implicit)
INSERT INTO users (username, password) VALUES (?, ?)
('alice', None)
>>> session.commit()
COMMIT
>>>
flush()
는 데이터가 데이터베이스로 전송됩니다. commit()
은 COMMIT
으로, 방금 보낸 데이터를 보관하도록 데이터베이스에 알립니다. 다른 사람들이 말했듯이, commit()
은 필요하다면 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를 얻기 위해 다시 쿼리 할 필요가 없습니다, 당신은 사용자를 등록한다고 가정 당신은 자신의 ID를 돌려주고 싶어!이것은 메모리에 객체/객체의 현재 상태로 데이터베이스를 동기화합니다
flush()
을 할 수 있지만 트랜잭션을 커밋하지 않습니다 바랍니다. 따라서flush()
이 호출 된 후에 예외가 발생하면 트랜잭션이 롤백됩니다.commit()
을 사용하여 큰 데이터를 한 번에 커밋하는 대신를 사용하여 작은 데이터 청크로 데이터베이스를 동기화 할 수 있으며Out Of Memory
예외가 발생할 위험이 있습니다.
commit()
은 데이터베이스에 저장된 데이터를 영구적으로 유지합니다.commit()
이 성공하면 거래를 롤백 할 수 없습니다.
- 1. Databinder.Eval과 Container.DataItem의 차이점은 무엇입니까?
- 2. static_cast와 Implicit_cast의 차이점은 무엇입니까?
- 3. NSNumber와 NSInteger의 차이점은 무엇입니까?
- 4. Phing과 PHPUnderControl의 차이점은 무엇입니까?
- 5. WPF와 WinForms의 차이점은 무엇입니까?
- 6. CreateWnd와 CreateWindowHandle의 차이점은 무엇입니까?
- 7. ImageMagick과 GraphicsMagick의 차이점은 무엇입니까?
- 8. Pingback과 Trackback의 차이점은 무엇입니까?
- 9. @property와 @synthesize의 차이점은 무엇입니까?
- 10. php.ini와 .htaccess의 차이점은 무엇입니까?
- 11. 메서드와 선택기의 차이점은 무엇입니까?
- 12. 탄소와 코코아의 차이점은 무엇입니까?
- 13. String.Intern과 String.IsInterned의 차이점은 무엇입니까?
- 14. Int32와 UInt32의 차이점은 무엇입니까?
- 15. Knockout.js와 Rx.js의 차이점은 무엇입니까?
- 16. Server.Transfer와 Response.Redirect의 차이점은 무엇입니까?
- 17. MSP430과 MSP430X의 차이점은 무엇입니까?
- 18. COM과 DCOM의 차이점은 무엇입니까?
- 19. DomainKeys와 DKIM의 차이점은 무엇입니까?
- 20. 추상화와 외관의 차이점은 무엇입니까?
- 21. 면도기와 ASPX의 차이점은 무엇입니까?
- 22. 이 코드의 차이점은 무엇입니까?
- 23. Setting.settings와 web.config의 차이점은 무엇입니까?
- 24. Framework.Triggers와 Style.Triggers의 차이점은 무엇입니까?
- 25. PHP와 표현의 차이점은 무엇입니까?
- 26. ListView와 GestureListView의 차이점은 무엇입니까?
- 27. NSKeyValueObservingOptionNew와 NSKeyValueObservingOptionOld의 차이점은 무엇입니까?
- 28. ZwOpenFile과 NtOpenFile의 차이점은 무엇입니까?
- 29. sprite.width의 차이점은 무엇입니까? sprite.scaleX
- 30. tar와 gZ의 차이점은 무엇입니까?
것은 당신이 불분명 한 문서 (http://www.sqlalchemy.org/docs/orm/session.html#flushing에서 "홍조"와 "커밋")의 측면을 찾을 수 있습니까 ? – NPE