0

SQLAlchemy に 1 対多の関係をロードするように指示するにはどうすればよいですか? それらを結合することはできますが、これにより重複が発生し、(結果のサイズによっては) 大量のオーバーヘッドが発生します。session.query理想的には、親エンティティとそのすべての子エンティティを取得する複数 (2 つ) のクエリが送信されるように変更したいと考えています。これは、SQLA を構成するか、セッション クラスを拡張することによってどのように可能になりますか? あるいは、これは SQLA で行う通常の方法ではないかもしれません...

4

1 に答える 1

0

通常、1 対多の関係は、Parent (,,one'') クラスで list 属性を作成し、Child (,,many'') クラスで parent_id 後方参照を作成することによって行われます (こちらを参照してください:ここ)。

したがって、通常は親クラスを作成します。

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(...)、子は自動的にロードされます。たとえば、子が特定の属性値を持つ親のみをロードする場合を除き、結合を行う必要はありません。

それが役立つことを願っています。不明な点がある場合はコメントを書いてください。回答を編集して指定します。

于 2013-08-19T11:38:56.200 に答える