Skip to content

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 ...")