SQLAlchemy克隆具有关系的表行

SQLAlchemy克隆具有关系的表行,sqlalchemy,Sqlalchemy,从这个问题开始 这使得对象的副本很好,但它会丢失原始对象具有的任何多对多关系。有没有办法复制对象以及任何多对多关系 干杯 我通过遍历对象图并对图中的每个对象执行expunge()、make_transient()和id=None步骤来实现这一点,如中所述。以下是我的示例代码。代理人最多有一次活动 从sqlalchemy.orm.session导入使 def克隆_代理(id): s=app.db.session agent=s.query(agent).get(id) c=无 #您需要在删除代理之

从这个问题开始

这使得对象的副本很好,但它会丢失原始对象具有的任何多对多关系。有没有办法复制对象以及任何多对多关系


干杯

我通过遍历对象图并对图中的每个对象执行expunge()、make_transient()和id=None步骤来实现这一点,如中所述。

以下是我的示例代码。代理人最多有一次活动

从sqlalchemy.orm.session导入使
def克隆_代理(id):
s=app.db.session
agent=s.query(agent).get(id)
c=无
#您需要在删除代理之前获取子项,否则子项将为空
如果代理活动:
c=代理。活动[0]
s、 删除(c)
使_瞬态(c)
c、 id=无
s、 删除(代理)
agent.id=None
#我对下一列有唯一的约束。
agent.name=agent.name+“\u克隆”
agent.externalId=-agent.externalId#查找不在db中的数字。
使_暂时(代理)
s、 添加(代理)
s、 commit()#提交,以便代理保存到数据库并获取id
如果是c:
断言代理id
c、 agent_id=agent.id#将子项附加到父项(agent_id是外键)
s、 加(c)
s、 提交()

您是如何实现“图形漫游”的?有没有可以粘贴的示例代码?干杯(我有一个父行,有很多子行,每个子行都有更多的子行;我想在表中克隆父行,并自动克隆子表和父子表中的所有相关行。)我刚刚发现了这个古老的讨论,我想这就是答案。必须手动完成:是的,您迭代容器并手动遵循关系。