表达式序列化程序扩展¶

用于SQLAlchemy查询结构的序列化程序/反序列化程序对象,允许“上下文”反序列化。

任何基于sqlAlchemy.sql的sqlAlchemy查询结构。 或SQLAlchemy.orm。 可以使用。结构引用的映射器、表、列、会话等不以序列化形式持久化,而是在反序列化时与查询结构重新关联。

用法与标准python pickle模块的用法几乎相同:

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()

与使用原始pickle时类似的限制也适用;映射类本身必须是可pickle的,这意味着它们可以从模块级命名空间导入。

序列化程序模块仅适用于查询结构。它不需要用于:

sqlalchemy.ext.serializer.Serializer(*args, **kw)
sqlalchemy.ext.serializer.Deserializer(file, metadata=None, scoped_session=None, engine=None)
sqlalchemy.ext.serializer.dumps(obj, protocol=4)
sqlalchemy.ext.serializer.loads(data, metadata=None, scoped_session=None, engine=None)