表达式序列化器扩展¶
用于 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 元数据已经存在于内存中。
对象名称 |
描述 |
---|---|
|
|
|
|
-
类 sqlalchemy.ext.serializer 中。反序列化器¶ -
类签名
类sqlalchemy.ext.serializer.Deserializer
(_pickle.Unpickler
)-
方法sqlalchemy.ext.serializer.Deserializer.
get_engine()¶
-
方法sqlalchemy.ext.serializer.Deserializer.
persistent_load(id_)¶
-
-
类 sqlalchemy.ext.serializer 中。序列化器¶ -
类签名
类sqlalchemy.ext.serializer.Serializer
(_pickle.皮克勒
)-
方法sqlalchemy.ext.serializer.Serializer.
persistent_id(OBJ)¶
-
-
函数 sqlalchemy.ext.serializer 中。dumps(obj, protocol=5)¶
-
函数 sqlalchemy.ext.serializer 中。loads(data, metadata=None, scoped_session=None, engine=None)¶