2010-05-07 3 views
15

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

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

ответ

10

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

+0

Ура! Отлично работает, спасибо! – swilliams