交易

你可以使用 engine.begin 開啟連線並開始一個事務,如果引發異常或以其他方式提交,將回滾該事務。這是使用事務的隱式方法,因為你沒有手動回滾的選項。

with engine.begin() as conn:
    conn.execute(products.insert(), price=15)

更明確地說,你可以使用連線開始事務:

with conn.begin() as trans:
    conn.execute(products.insert(), price=15)

請注意,我們仍然在連線上呼叫 execute。和以前一樣,如果引發異常,將提交或回滾此事務,但我們也可以訪問該事務,允許我們使用 trans.rollback() 手動回滾。

這可以更明確地完成,如下所示:

trans = conn.begin()
try:
    conn.execute(products.insert(), price=15)
    trans.commit()
except:
    trans.rollback()
    raise