SQLAlchemy 2.0 文档
表达式序列化器扩展¶
用于 SQLAlchemy 查询结构的序列化器/反序列化器对象,允许“上下文”反序列化。
旧版特性
序列化器扩展是旧版的,不应在新开发中使用。
可以使用任何基于 sqlalchemy.sql.* 或 sqlalchemy.orm.* 的 SQLAlchemy 查询结构。结构引用的映射器、表、列、Session 等不会以序列化形式持久化,而是在反序列化时与查询结构重新关联。
警告
序列化器扩展使用 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())
与使用原始 pickle 时类似的限制适用;映射类本身必须是可 pickle 的,这意味着它们可以从模块级命名空间导入。
序列化器模块仅适用于查询结构。对于以下情况不需要:
用户定义类的实例。在典型情况下,这些实例不包含对引擎、会话或表达式结构的引用,可以直接序列化。
要完全从序列化结构加载的表元数据(即,尚未在应用程序中声明)。可以使用常规 pickle.loads()/dumps() 来完全转储任何
MetaData
对象,通常是从先前某个时间点的现有数据库反映的对象。序列化器模块专门用于相反的情况,即表元数据已存在于内存中。
对象名称 | 描述 |
---|---|
dumps(obj[, protocol]) |
|
loads(data[, metadata, scoped_session, engine]) |
|
- class sqlalchemy.ext.serializer.Deserializer¶
-
类签名
class
sqlalchemy.ext.serializer.Deserializer
(_pickle.Unpickler
)-
method
sqlalchemy.ext.serializer.Deserializer.
get_engine()¶
-
method
sqlalchemy.ext.serializer.Deserializer.
persistent_load(id_)¶
-
method
- class sqlalchemy.ext.serializer.Serializer¶
-
类签名
class
sqlalchemy.ext.serializer.Serializer
(_pickle.Pickler
)-
method
sqlalchemy.ext.serializer.Serializer.
persistent_id(obj)¶
-
method
- function sqlalchemy.ext.serializer.dumps(obj, protocol=5)¶
- function sqlalchemy.ext.serializer.loads(data, metadata=None, scoped_session=None, engine=None)¶
flambé! 龙和 The Alchemist 图像设计由 Rotem Yaari 创作并慷慨捐赠。
使用 Sphinx 7.2.6 创建。文档最后生成时间:Tue 11 Mar 2025 02:40:17 PM EDT