仅复制SQLAlchemy对象中的数据列

1 投票
1 回答
1445 浏览
提问于 2025-05-01 17:36

我有一个对象

esc = Escalation.query\
    .filter(Escalation.esc_id == esc_id).first()

我想复制这个对象的所有列,除了主键和外键,这样我就可以在数据库中创建这个对象的新副本,并建立新的关系。

目前我只是写了一个构造函数,可以接收一个Escalation实例,这样我就可以这样做

new_esc = Escalation(esc)

但我在想,SQLAlchemy有没有内置的功能可以解决这个问题。我查看了session.merge,但我不想复制整个状态。

暂无标签

1 个回答

1

我觉得 make_transient 看起来是个很不错的解决方案。虽然这个功能不是内置的,但我通过子类化 sqlalchemy.ext.declarative.DeclarativeMeta 来实现了一个自定义的 __init__ 方法,并添加了一些迭代方法,这样你就可以像下面这样把实例的值解包到一个新的实例中:

new_esc = Escalation(**esc)

不过,这个过程有点麻烦。元类比较脆弱,让我感觉很头疼。

撰写回答