Я пишу приложение Опор и пытаюсь создать простую систему резервного копирования, где каждая таблица сериализируется и смолится в единственный файл для администратора, чтобы загрузить, и использовать для восстановления приложения, должен что-то плохо происходить.
Я могу сериализировать свои данные таблицы очень хорошо с помощью сериализатора 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)
Это, кажется, ничего не делает... Я попытался назвать a Session.commit
после факта, индивидуально идущего через все объекты в restore_q
и добавляя их, но ничто, кажется, не работает.
Что я пропускаю? Или есть ли лучший способ сделать то, к чему я стремлюсь? Я не хочу выходить из оболочки и непосредственно касаться базы данных, так как SqlAlchemy поддерживает различные механизмы базы данных.
Для возврата десериализованного объекта в сеанс необходимо использовать метод Session.merge()
вместо Session.add()
.