版本:1.1.0b2 |发布日期:2016年7月1日

SQLAlchemy 1.1文档

表达式序列化扩展

序列化器/反序列化器对象与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.loads()/ dumps()来完全转储任何MetaData对象,通常是在某个以前的时间点从现有数据库反映的对象。串行器模块专门用于相反的情况,表元数据已经存在于内存中。
sqlalchemy.ext.serializer.Serializer(*args, **kw)
sqlalchemy.ext.serializer.Deserializer(file, metadata=None, scoped_session=None, engine=None)
sqlalchemy.ext.serializer.dumps(obj, protocol=0)
sqlalchemy.ext.serializer.loads(data, metadata=None, scoped_session=None, engine=None)