2024-03-29 15:46:06 发布
网友
我有一个sqlalchemyorm模型,我正在使用它将特定的行(完整的对象图)从我们的生产数据库传输到我们的测试和开发数据库。这是非常好的工作,直到我得到一个包含很多子依赖项的集合,然后遇到一个MemoryError。我已经在对象层次结构的关键点设置了动态加载,并使用不同的查询分别加载子级,但仍有一些集合的子数据足够我遇到内存问题。在
MemoryError
一次只加载集合的一个元素,这样一次可以复制单个对象(及其所有子行)的最佳方法是什么?在
尝试在使用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)
尝试在使用Session.expunge处理每个节点(包含子节点)之后清理会话。下面的示例代码打印会话中的实例数:
相关问题 更多 >
编程相关推荐