仅复制SQLAlchemy对象中的数据列
我有一个对象
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)
不过,这个过程有点麻烦。元类比较脆弱,让我感觉很头疼。