2010-05-07 6 views
15

Ich schreibe eine Pylons-App und versuche ein einfaches Backup-System zu erstellen, in dem jede Tabelle serialisiert und in eine einzige Datei geteert wird, die ein Administrator herunterladen und verwenden kann, um die App wiederherzustellen, sollte etwas Schlimmes passieren.Wie erstellt man ein Backup von SqlAlchemy und stellt es wieder her?

Ich kann meine Tabellendaten einfach mit der SqlAlchemy serializer serialisieren, und ich kann es auch gut deserialisieren, aber ich kann nicht herausfinden, wie diese Änderungen zurück in die Datenbank übernommen werden.

Um meine Daten zu serialisiert ich dies tue:

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

Um die Dinge zu testen, ich gehe voran und Abschneide MyTable, und dann versuchen, serialized_data mit wiederherzustellen:

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

Das scheint nichts zu tun ... Ich habe versucht, eine Session.commit nach der Tatsache, einzeln durch alle Objekte in restore_q gehen und Hinzufügen von ihnen, aber nichts scheint zu arbeiten.

Was fehlt mir? Oder gibt es einen besseren Weg, um das zu erreichen, wonach ich strebe? Ich möchte die Datenbank nicht bereinigen und direkt anfassen, da SqlAlchemy verschiedene Datenbank-Engines unterstützt.

Antwort

10

Sie müssen Methode anstelle von Session.add() verwenden, um deserialisierte Objekt zurück in die Sitzung zu setzen.

+0

Hurra! Funktioniert perfekt, danke! – swilliams