我目前正在尝试使用SQLAlchemy,它非常方便。
为了测试,我创建了一个包含我的照片档案的巨大表格,并用SHA1哈希进行索引(以消除重复项 :-))。这非常快速......
出于好玩,我对结果SQLite数据库执行了相当于select *
的操作:
session = Session()
for p in session.query(Picture):
print(p)
我本来期望会看到哈希值在屏幕上打印出来,但实际上它只是一直在扫描磁盘。同时,内存使用量急剧增加,几秒钟后就达到了1GB。这似乎是由SQLAlchemy的身份映射功能引起的,我以为它只是保留弱引用。
有人能向我解释一下吗?我原本认为每个图片 p 在哈希写出后都会被回收!?
len(Session.query(Model).limit(100).all())
,我得到的结果是1
。如果我去掉limit
,内存使用量会飙升。 - Sarah Vessels