繁体   English   中英

SQLAlchemy通过子查询检索一对多实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM