Transactions
Basic transaction
with db.transaction():
db.execute("INSERT INTO users (username) VALUES (%s)", ["alice"])
db.execute("INSERT INTO profiles (user_id) VALUES (%s)", [1])
Savepoints
with db.transaction():
User.create(username="alice")
try:
with db.savepoint("after_alice"):
User.create(username="bob")
raise Exception("bob failed")
except Exception:
pass # only bob rolled back
Bulk transaction
with db.bulk_transaction():
db.execute("INSERT INTO orders ...")
db.execute("INSERT INTO order_items ...")
Nested transactions
with db.transaction():
User.create(username="outer")
with db.nested_transaction():
User.create(username="inner")
Retry on deadlock
with db.transaction_with_retry(retries=3):
db.execute("UPDATE accounts SET balance = balance - 100 ...")
db.execute("UPDATE accounts SET balance = balance + 100 ...")