表达式序列化器扩展


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


旧版功能


序列化程序扩展是旧版的,不应用于新的开发。


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


警告


序列化器扩展使用 pickle 来序列化和反序列化对象,因此 python 文档中提到的相同安全注意事项也适用。


用法与标准 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())


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


serializer 模块仅适用于 query 结构。以下设备不需要它:


  • 用户定义类的实例。在典型情况下,这些不包含对 engines、sessions 或 expression 结构的引用,可以直接序列化。


  • 要完全从序列化结构加载的表元数据(即尚未在应用程序中声明)。常规的 pickle.loads()/dumps() 可用于完全转储任何 MetaData 对象,通常是在先前某个时间点从现有数据库反映的对象。serializer 模块专门用于相反的情况,其中 Table 元数据已经存在于内存中。


对象名称

描述


解串器


转储 (obj[, 协议])


loads(data[, 元数据, scoped_session, engine])


序列化器


sqlalchemy.ext.serializer 中。反序列化器


类签名


sqlalchemy.ext.serializer.Deserializer _pickle.Unpickler


方法 sqlalchemy.ext.serializer.Deserializer. get_engine

方法 sqlalchemy.ext.serializer.Deserializer. persistent_loadid_

sqlalchemy.ext.serializer 中。序列化器


类签名


sqlalchemy.ext.serializer.Serializer _pickle.皮克勒


方法 sqlalchemy.ext.serializer.Serializer. persistent_idOBJ

函数 sqlalchemy.ext.serializer 中。dumpsobjprotocol=5

函数 sqlalchemy.ext.serializer 中。loadsdatametadata=Nonescoped_session=Noneengine=None