UsageΒΆ
This project is designed to provide a relationship-relative context manager for SQLAlchemy.
To see this concept in action, check out the example below:
from sqlalchemy import Column
from sqlalchemy import create_engine
from sqlalchemy import ForeignKey
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqla_model_context import ModelRelativeContextManager
Base = declarative_base()
class Manager(Base):
__tablename__ = "manager"
id = Column(Integer, primary_key=True)
name = Column(String)
class Employee(Base):
__tablename__ = "employee"
id = Column(Integer, primary_key=True)
name = Column(String)
manager_id = Column(Integer, ForeignKey("manager.id"))
manager = relationship(Manager)
def main():
uri = "sqlite:///:memory:"
engine = create_engine(uri)
Base.metadata.create_all(engine)
ctx = ModelRelativeContextManager(Employee, "manager", enforce="LOG")
s = Manager(name="Darren")
m = Manager(name="Cato")
with ctx.push(s):
e = Employee(name="Bernard", manager=m)
assert e.manager == m
with ctx.push(s):
e2 = Employee(name="Edward")
assert e2.manager == s
if __name__ == "__main__":
main()