3

特定の行 (完全なオブジェクト グラフ) を運用データベースからテストおよび開発データベースに転送するために使用している SQLAlchemy ORM モデルがあります。多くの子依存関係を持つコレクションを取得するまで、これは非常にうまく機能し、MemoryError. オブジェクト階層の重要なポイントで既に動的読み込みを設定し、さまざまなクエリで子を個別に読み込みましたが、メモリの問題が発生している十分な数の子データを含むコレクションがまだあります。

一度に 1 つのオブジェクト (およびそのすべての子行) をコピーできるように、一度にコレクションの 1 つの要素のみを読み込む最良の方法は何ですか?

4

1 に答える 1

1

Session.expungeを使用して各ノード (子を持つ) が処理された後、セッションのクリーンアップを試みます。以下のサンプル コードは、セッション内のインスタンス数を出力します。

class Node(Base):
    __tablename__ = 'node'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('node.id'))
    name = Column(String(50))
    children = relationship("Node",
            backref=backref("parent", remote_side=[id],)
            )

def process_node(node, expunge=False, ident=1):
    print "Node: ", "-" * ident, node, " --> ", len(session.identity_map)
    for child in node.children:
        process_node(child, expunge, ident + 4)
        session.expunge(child)

roots = session.query(Node).filter(Node.parent == None)
for root in roots:
    process_node(root, True)
于 2012-05-25T15:00:45.200 に答える