Skip to content

Session

Identity map

from mydborm import Session

session = Session()
u1 = session.get(User, id=1)
u2 = session.get(User, id=1)
assert u1 is u2  # same object

Change tracking

u1["username"] = "updated"
session.is_dirty(u1)        # True
session.dirty_fields(u1)    # ["username"]
session.original_value(u1, "username")  # "alice"
session.flush()             # writes to DB

Unit of work

session.add(User, username="new_user", email="x@x.com")
session.flush()  # INSERT

Context manager

with Session() as session:
    u = session.get(User, id=1)
    u["username"] = "updated"
    # auto-committed on exit, rolled back on exception

Rollback

u["username"] = "will_be_discarded"
session.rollback()
print(u["username"])  # original value restored