Tôi đang sử dụng sql thuật giả kim trong dự án của tôi, tôi đã sử dụng phiên db,Giao dịch sử dụng trong thuật toán giả kim thuật trong khi sử dụng phiên db như thế nào?
engine = create_engine(configuration)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
import models
Base.metadata.create_all(bind=engine)
DB phiên sử dụng như:
db_session.merge(order) #order(model) in object
db_session.commit()
Bây giờ tôi muốn chèn dữ liệu vào hai bảng đặt hàng và mục hàng trật tự Vì vậy, tôi cần giao dịch, là: 1. Trong lần chèn đầu tiên, tôi muốn id của đơn đặt hàng được chèn vào sử dụng trong truy vấn chèn thứ hai 2. Nếu truy vấn chèn thứ hai không thành công thì truy vấn đầu tiên sẽ được khôi phục
Try:
#begin transaction/How to begin transaction?
order=db_session.add(order) #insert into order
#is need to commit db_session here as I need inserted orders id
#here actually db_session.commit() needed to get order's id(auto generated)
#if db_session committed here then sql alchemy starts new session
order_line_item.id = order.id
db_session.add(order_line_item) #insert into order line line item
db_session.commit()
#check transaction status if failed then rollback, How to check status?
except:
db_session.rollback()
Cách sử dụng tính năng quản lý?
Tôi sẽ sử dụng 'với db_session.begin(): ...' và nếu có thể, hãy xóa 'try: ... except: ...' vì nó đang ẩn tất cả các ngoại lệ. – Governa
'flush' cũng không được dự định. Xem câu trả lời của tôi làm thế nào nó nên được thực hiện! – schlamar