gpt4 book ai didi

python - 如何从内存中删除 SQLAlchemy 实体的延迟属性?

转载 作者:IT王子 更新时间:2023-10-28 23:38:26 27 4
gpt4 key购买 nike

例如,我们有一个存储 LONGBLOB 对象的表:

class MyEntity(_base):
id = Column('ID', Integer, primary_key=True)
metadata = Column('META', String(512), nullable=False)
bigData = deferred(Column('BIG_DATA', LONGBLOB, nullable=False))

LONGBLOB 标记为延迟的列,即仅在访问特定对象的此属性时加载。

我需要从数据库中查询对象列表并遍历集合:

entities = dbSession.query(MyEntity).all()
for entity in entities:
...
entity.bigData # load BLOB from the database and do smth with data
...

在这个循环中,所有的 BLOB 都将从数据库中加载,内存将被耗尽。我需要一种在每个周期结束时清理内存的方法。从 session 中删除对象并完全从内存中删除并不方便......

如何清理对象的特定属性(LONGBLOB)但不从 session 中删除对象?

最佳答案

不要将 bigData 加载到对象中。延迟加载已经在每次迭代中执行查询,因此您可以自己执行此操作,而无需将其与 MyEntity 实例关联:

entities = dbSession.query(MyEntity).all()
for entity in entities:
bigData = session.query(MyEntity.bigData).filter_by(id=entity.id).scalar()

bigData 应该被清理,只要周围没有对它的引用。

关于python - 如何从内存中删除 SQLAlchemy 实体的延迟属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com