SQLAlchemy MetaData 对象是否可序列化?

问题描述 投票:0回答:1

在我的应用程序中,我有多个进程针对某些大型数据库运行

MetaData.reflect
,这需要一段时间。有没有办法序列化并存储反射结果,以便我可以简单地从文件加载
MetaData
,而不是每次都生成它?

尝试

pickle
他们,但没有成功。

python serialization sqlalchemy
1个回答
0
投票

以前版本的 SQLAlchemy 支持向 MetaData 的构造函数传递和引擎,但在 SQLAlchemy 2.0 中不再支持。因此,元数据实例可以使用 pickle 模块进行序列化。

import pickle
import sqlalchemy as sa

engine = sa.create_engine('sqlite://')
with engine.connect() as conn:
    conn.execute(sa.text("""CREATE TABLE t (id int)"""))

metadata = sa.MetaData()
metadata.reflect(engine)

bs = pickle.dumps(metadata)

metadata2 = pickle.loads(bs)
print(f'{metadata2.tables=}')

输出(为了便于阅读而格式化):

metadata2.tables=FacadeDict(
    {'t': Table('t', MetaData(), Column('id', INTEGER(), table=<t>), schema=None)}
)
© www.soinside.com 2019 - 2024. All rights reserved.