[Sqlalchemy-tickets] Issue #3037: support setting load options on instances (zzzeek/sqlalchemy)
Brought to you by:
zzzeek
From: Mike B. <iss...@bi...> - 2014-04-28 17:40:11
|
New issue 3037: support setting load options on instances https://bitbucket.org/zzzeek/sqlalchemy/issue/3037/support-setting-load-options-on-instances Mike Bayer: proof of concept ``` #!python from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class A(Base): __tablename__ = 'a' id = Column(Integer, primary_key=True) bs = relationship("B") class B(Base): __tablename__ = 'b' id = Column(Integer, primary_key=True) a_id = Column(Integer, ForeignKey('a.id')) cs = relationship("C") class C(Base): __tablename__ = 'c' id = Column(Integer, primary_key=True) b_id = Column(Integer, ForeignKey('b.id')) e = create_engine("sqlite://", echo=True) Base.metadata.create_all(e) sess = Session(e) sess.add_all([ A(bs=[ B(cs=[C(), C()]), B(cs=[C(), C()]) ]) ]) sess.commit() a1 = sess.query(A).first() inspect(a1).load_options = inspect(a1).load_options.union([joinedload(B.cs)]) for b in a1.bs: print b.cs ``` im not sure why the above option doesn't have to mention "A.bs" at all, there should be some path logic taking this into account. The public API should be: inspect(a1).set_load_option("bs", joinedload(...)) |