如何使用SqlAlchemy创建和恢复备份?

22 投票
1 回答
11938 浏览
提问于 2025-04-15 22:27

我正在写一个Pylons应用程序,想要创建一个简单的备份系统,把每个表的数据都整理成一个文件,方便管理员下载。如果发生什么问题,可以用这个文件来恢复应用。

我可以用SqlAlchemy的序列化工具把表的数据整理成序列化格式,也能把它们恢复回来,但我就是不知道怎么把这些改动保存回数据库。

为了序列化我的数据,我是这样做的:

from myproject.model.meta import Session
from sqlalchemy.ext.serializer import loads, dumps
q = Session.query(MyTable)
serialized_data = dumps(q.all())

为了测试,我先清空了MyTable,然后尝试用serialized_data来恢复数据:

from myproject.model import meta
restore_q = loads(serialized_data, meta.metadata, Session)

但是这样似乎没有任何效果……我试着在之后调用Session.commit,还逐个遍历restore_q里的所有对象并添加它们,但就是没有用。

我漏掉了什么吗?或者有没有更好的方法来实现我想要的功能?我不想直接操作数据库,因为SqlAlchemy支持不同的数据库引擎。

1 个回答

14

你需要使用 Session.merge() 方法,而不是 Session.add(),来把反序列化的对象放回会话中。

撰写回答