我有一个链接到MySQL的SQLAlchemy ORM类,它非常适合将我需要的数据保存到基础表中。但是,我还想将相同的数据保存到 第二 存档表中。
这是一些尝试解释我的意思的psudocode
my_data = Data() #An ORM Class
my_data.name = "foo"
#This saves just to the 'data' table
session.add(my_data)
#This will save it to the identical 'backup_data' table
my_data_archive = my_data
my_data_archive.__tablename__ = 'backup_data'
session.add(my_data_archive)
#And commits them both
session.commit()
只是抬头,我对将类映射到JOIN不感兴趣,如:http://www.sqlalchemy.org/docs/05/mappers.html#mapping-a-class-against-multiple-tables
答案 0 :(得分:3)
我在下面列出了一些选项。如果您不需要处理模型中的那些对象,我会选择DB触发器。
答案 1 :(得分:1)
创建2个相同的模型:一个映射到主表,另一个映射到归档表。使用重新定义的方法MapperExtension
创建after_insert()
(根据您的要求,您可能还需要after_update()
和after_delete()
)。此方法应将数据从主模型复制到存档,并将其添加到会话中。有一些技巧可以自动复制所有列和多对多关系。
请注意,您必须两次flush()
个会话来存储两个对象,因为在mapper扩展将新对象添加到会话之前计算工作单元。您可以重新定义Session.flush()
以解决此问题。刷新对象时也会分配自动增量字段,因此如果需要,还必须延迟复制。
这是一种可行的方案,证明是可行的。我想知道是否有更好的方法。