在我的应用程序中,我有多个进程针对某些大型数据库运行
MetaData.reflect
,这需要一段时间。有没有办法序列化并存储反射结果,以便我可以简单地从文件加载MetaData
,而不是每次都生成它?
尝试
pickle
他们,但没有成功。
以前版本的 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)}
)