Expression Serializer Extension

Serializer/Deserializer-Objekte für die Verwendung mit SQLAlchemy-Abfragestrukturen, die eine „kontextbezogene“ Deserialisierung ermöglichen.

Legacy-Funktion

Die Serializer-Erweiterung ist veraltet und sollte nicht für neue Entwicklungen verwendet werden.

Jede SQLAlchemy-Abfragestruktur, entweder basierend auf sqlalchemy.sql.* oder sqlalchemy.orm.*, kann verwendet werden. Die Mapper, Tabellen, Spalten, Sitzungen usw., auf die sich die Struktur bezieht, werden nicht in serialisierter Form gespeichert, sondern stattdessen bei der Deserialisierung wieder mit der Abfragestruktur verknüpft.

Warnung

Die Serializer-Erweiterung verwendet Pickle zum Serialisieren und Deserialisieren von Objekten. Daher gelten die gleichen Sicherheitsüberlegungen wie in der Python-Dokumentation.

Die Verwendung ist fast identisch mit der des Standard-Python-Pickle-Moduls

from sqlalchemy.ext.serializer import loads, dumps

metadata = MetaData(bind=some_engine)
Session = scoped_session(sessionmaker())

# ... define mappers

query = (
    Session.query(MyClass)
    .filter(MyClass.somedata == "foo")
    .order_by(MyClass.sortkey)
)

# pickle the query
serialized = dumps(query)

# unpickle.  Pass in metadata + scoped_session
query2 = loads(serialized, metadata, Session)

print(query2.all())

Ähnliche Einschränkungen wie bei der Verwendung von rohem Pickle gelten; gemappte Klassen müssen selbst pickelbar sein, d. h. sie müssen aus einem Modul-Namespace importierbar sein.

Das Serializer-Modul ist nur für Abfragestrukturen geeignet. Es wird nicht benötigt für

  • Instanzen von benutzerdefinierten Klassen. Diese enthalten im typischen Fall keine Verweise auf Engines, Sitzungen oder Expressions-Konstrukte und können direkt serialisiert werden.

  • Tabellenmetadaten, die vollständig aus der serialisierten Struktur geladen werden sollen (d. h. die nicht bereits in der Anwendung deklariert sind). Reguläre pickle.loads()/dumps() können verwendet werden, um beliebige MetaData -Objekte vollständig zu serialisieren, typischerweise eines, das zuvor aus einer vorhandenen Datenbank reflektiert wurde. Das Serializer-Modul ist speziell für den umgekehrten Fall, in dem die Tabellenmetadaten bereits im Speicher vorhanden sind.

Objektname Beschreibung

Deserializer

dumps(obj[, protocol])

loads(data[, metadata, scoped_session, engine])

Serializer

class sqlalchemy.ext.serializer.Deserializer

Klassensignatur

class sqlalchemy.ext.serializer.Deserializer (_pickle.Unpickler)

method sqlalchemy.ext.serializer.Deserializer.get_engine()
method sqlalchemy.ext.serializer.Deserializer.persistent_load(id_)
class sqlalchemy.ext.serializer.Serializer

Mitglieder

persistent_id()

Klassensignatur

class sqlalchemy.ext.serializer.Serializer (_pickle.Pickler)

method sqlalchemy.ext.serializer.Serializer.persistent_id(obj)
function sqlalchemy.ext.serializer.dumps(obj, protocol=5)
function sqlalchemy.ext.serializer.loads(data, metadata=None, scoped_session=None, engine=None)