我有一个链接到 MySQL 的 SQLAlchemy ORM 类,它非常适合将我需要的数据保存到基础表中。但是,我还想将相同的数据保存到第二个 存档表。
这里有一些伪代码来尝试解释我的意思
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
最佳答案
我在下面列出了一些选项。如果您不需要处理模型中的那些对象,我会选择数据库触发器。
- 使用数据库触发器为您完成这项工作
- 创建一个 SessionExtension这将创建并添加到 session 复制对象(通常在 before_flush 上)。 Edit-1:你可以取versioning example以SA为基础;此代码的功能比您需要的还要多。
- 参见 SA Versioning example这不仅会为您提供对象的副本,还会为您提供整个版本历史记录,这可能正是您想要的
- 参见 Reverse mapping from a table to a model in SQLAlchemy问题,在 blogpost 中描述了建议的解决方案.
关于python - 如何使用一个 SQLAlchemy 模型保存到两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864904/