Как создать и восстановить резервную копию из SqlAlchemy? - PullRequest
19 голосов
/ 07 мая 2010

Я пишу приложение Pylons и пытаюсь создать простую систему резервного копирования, в которой каждая таблица сериализуется и объединяется в один файл для загрузки администратором, а затем используется для восстановления приложения на случай, если произойдет что-то плохое.

Я могу очень точно сериализовать данные из моей таблицы, используя 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 Ответ

12 голосов
/ 07 мая 2010

Вы должны использовать метод Session.merge() вместо Session.add(), чтобы вернуть десериализованный объект обратно в сеанс.

...