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

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

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

20
задан Martin Thoma 31 July 2019 в 13:54
поделиться

1 ответ

Для возврата десериализованного объекта в сеанс необходимо использовать метод Session.merge() вместо Session.add().

12
ответ дан 30 November 2019 в 01:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: