Как создать и восстановить резервную копию из SqlAlchemy?

Я пишу приложение 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

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