Serializer / Deserializer对象与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()
与使用生腌菜时类似的限制适用;映射类本身必须是可以选择的,这意味着它们可以从模块级命名空间导入。
序列化器模块仅适用于查询结构。它不需要:
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)¶