begin
具体的には、コミットまたはロールバックを実行した後に呼び出す必要がありますか? 新しいセッションが常に begin
状態になることを示唆するものを見ました。しかし、セッションが開始されたときに自動コミットされたトランザクションが発生することについて疑問に思っていました。
いつ発行する必要がありbegin
ますか? 同じセッション内の複数begin
の は、MySQL ターミナルと同じように動作しますか?
次のようなケースがあります(コメントを見てください):
--1 ループ内でトランザクションを実行するメソッド:
for ...: #EACH ONE DESERVES TO HAVE OWN TRANSACTION
session.begin()
for ....:
session.execute("insert into...")
session.commit()
--2 同じセッションで別の関数を呼び出す関数:
def f1(): #can be done standalone
session = Session()
session.begin()
...do stuff
session.commit()
def f2():
session = Session()
session.begin()
a = session.execute("select...")
if stuff_not_fine():
session.rollback() #KILL OF CURRENT TRANSACTION
f1()
session.begin() #CONTINUE WHERE IT LEFT
a = session.execute("select...")
...do rest of stuff