Transactions
All operations succeed or all fail. Supports up to 100 items across multiple tables.
Write Transactions
Option 1: Explicit db= on each call
from dkmio import transaction
with transaction.write(db=db) as tx:
tx.put(orders, user_id="usr_1", order_id="ord_1", total=100)
tx.update(orders, user_id="usr_1", order_id="ord_0", set={"status": "REPLACED"})
tx.delete(orders, user_id="usr_1", order_id="ord_old")
# condition_check — validates a condition without modifying the item
tx.condition_check(users, user_id="usr_1", condition={"status__eq": "ACTIVE"})
# condition_check also supports condition_or
tx.condition_check(users, user_id="usr_1",
condition_or=[{"status__eq": "ACTIVE"}, {"status__eq": "VIP"}])
Option 2: set_default() once
db = DynamoDB(region_name="us-east-1")
db.set_default() # register as default for transactions
with transaction.write() as tx: # no db= needed
tx.put(orders, user_id="usr_1", order_id="ord_1", total=100)
with transaction.read() as tx: # no db= needed
tx.get(orders, user_id="usr_1", order_id="ord_1")
Transaction with Conditions
with transaction.write(db=db) as tx:
tx.put(orders, user_id="usr_1", order_id="ord_1", total=100,
condition={"user_id__not_exists": True})
tx.update(orders, user_id="usr_1", order_id="ord_0",
set={"status": "SHIPPED"}, condition={"status__eq": "PENDING"})
tx.delete(orders, user_id="usr_1", order_id="ord_old",
condition={"status__eq": "CANCELLED"})
Read Transactions
with transaction.read(db=db) as tx:
tx.get(orders, user_id="usr_1", order_id="ord_1")
tx.get(users, user_id="usr_1")
# Access results by index after the with block
order = tx[0] # first result (dict or None)
user = tx[1] # second result (dict or None)
# Also iterable
for item in tx:
print(item)