2010-05-07 22 views
15

Piszę aplikację Pylons i próbuję utworzyć prosty system tworzenia kopii zapasowych, w którym każda tabela jest serializowana i skalowana do jednego pliku, który administrator może pobrać, i użyć go do przywrócenia aplikacji, jeśli coś złego się stanie.Jak utworzyć i przywrócić kopię zapasową z SqlAlchemy?

Mogę serializować dane w tabeli po prostu dobrze używając SqlAlchemy serializer, i mogę deserializować to również dobrze, ale nie mogę wymyślić, jak zatwierdzić te zmiany z powrotem do bazy danych.

W celu serializacji moich danych Robię to:

from myproject.model.meta import Session 
from sqlalchemy.ext.serializer import loads, dumps 
q = Session.query(MyTable) 
serialized_data = dumps(q.all()) 

W celu zbadania rzeczy, iść do przodu i obcięcie MyTable, a następnie próbują przywrócić za pomocą serialized_data:

from myproject.model import meta 
restore_q = loads(serialized_data, meta.metadata, Session) 

To nie wydaje się nic zrobić ... Próbowałem wywoływać Session.commit po fakcie, indywidualnie przechodząc przez wszystkie obiekty w restore_q i dodając je, ale nic nie działa.

Czego mi brakuje? A może jest lepszy sposób na zrobienie tego, do czego dążę? Nie chcę wyrzucać i bezpośrednio dotykać bazy danych, ponieważ SqlAlchemy obsługuje różne silniki baz danych.

Odpowiedz

10

Należy użyć metody zamiast Session.add(), aby ponownie umieścić obiekt z reekstrializacją.

+0

Brawo! Działa doskonale, dziękuję! – swilliams

Powiązane problemy