如何从SqlAlchemy创建和恢复备份?

时间:2010-05-07 06:35:59

标签: python serialization sqlalchemy pylons

我正在编写一个Pylons应用程序,并且我正在尝试创建一个简单的备份系统,其中每个表都被序列化并且被压缩成一个文件供管理员下载,并且用于在发生错误时恢复应用程序。 / p>

我可以使用SqlAlchemy serializer很好地序列化我的表数据,我也可以将其反序列化,但我无法弄清楚如何将这些更改提交回数据库。

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

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 个答案:

答案 0 :(得分:12)

您必须使用Session.merge()方法而不是Session.add()将反序列化的对象放回会话中。