[英]SQLAlchemy retrieve one-to-many entities by subquery
如何指示SQLAlchemy加载一对多关系? 我可以加入他们,但这会导致重复,并且(取决于结果的大小)会产生很多开销。 理想情况下,我想以某种方式修改session.query
,以便发送多个(两个)查询以检索父母及其所有子实体。 通过配置SQLA或扩展会话类怎么可能? 也许这不是SQLA中通常的处理方式...
一对多关系通常通过在Parent(,, one'')类中创建list属性,并在Child(,,, many)类中进行parent_id向后引用来完成(请在此处查看: 此处 )。
因此,您通常创建Parent类:
class Parent(Base):
__tablename__ = "parents"
dbid = Column(Integer, Sequence("parent_seq"), primary_key=True)
children = relationship("Child", order_by = "Children.dbid", backref = "_parent")
def __init__(self, children = [])
self.children = children #remember to initialize children as list!
和儿童班:
class Child(Base):
__tablename__ = "children"
dbid = Column(Integer, Sequence("child_seq"), primary_key=True)
parent_dbid = Column(Integer, ForeignKey("parents.dbid"))
如果您想将孩子添加到父母,只需这样做:
p = Parent()
c = Child()
p.children.append(c)
session.add(p)
session.add(c)
session.commit()
然后,如果要加载其所有子级的父级,只需使用session.query(...)
加载父级,并且子级会自动加载-无需进行任何联接,除非您仅想例如加载其父级的父级子项具有特定的属性值。
希望能有所帮助。 如果不清楚,请发表评论-我将尝试编辑我的答案以指定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.