2012-01-15 36 views
16

Tôi gặp lỗi như sau trong mã python (thu thập trạng thái twitter và lưu trữ trong cơ sở dữ liệu).SQLAlchemy Lỗi quay ngược lồng nhau

sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back by a nested rollback() call. To begin a new transaction, issue Session.rollback() first. 

Tôi muốn biết vấn đề là gì, tại sao nó xảy ra và cách tôi có thể giải quyết vấn đề.

Tôi không có ý tưởng về nested rollback. Có ví dụ đơn giản nào xảy ra nested rollback không?


EDIT: Sự cố đã được giải quyết. Điểm trong trường hợp này là rollback không được thực hiện cho đến khi chúng tôi gọi rollback một cách rõ ràng, vì vậy khi chúng tôi bao gồm commit(), chúng tôi nên viết nó trong một tuyên bố thử và viết rollback() trong tuyên bố ngoại lệ (trong hầu hết trường hợp) như được viết trong http://www.sqlalchemy.org/trac/wiki/FAQ#Thetransactionisinactiveduetoarollbackinasubtransaction

Và, đây là ví dụ mã chính xác. Tôi trích dẫn điều này từ liên kết ở trên.

try: 
    <use session> 
    session.commit() 
except: 
    session.rollback() 
    raise 
finally: 
    session.close() # optional, depends on use case 

Trả lời

11
+1

Hiểu. Vì vậy, tôi nên viết "session.rollback()" ** một cách rõ ràng ** trong tuyên bố ngoại lệ. Rất cám ơn. – fbessho

+3

Liên kết không bị hỏng, nhưng phần không tồn tại nữa ... – fedorqui

+1

Liên kết bị hỏng ...! –