我有一个非常大的SQLite表,它有超过500,000行,大约有15列(主要是浮点数)。我想要将数据从Django DB传输到SQLite应用程序(它可以由许多关系型数据库支持,但在我的情况下是Postgres )。一切正常,但随着迭代的继续,Python进程的内存使用量每秒会增加2-3兆克。我曾尝试在每次迭代结束时使用'del‘删除EVEMapDenormalize和row对象,但这种膨胀仍在继续。下面是摘录,你有什么想法吗?
class Importer_mapDenormalize(SQLImporter):
def run_importer(self, conn):
c = conn.cursor()
for row in c.execute('select * from mapDenormalize'):
mapdenorm, created = EVEMapDenormalize.objects.get_or_create(id=row['itemID'])
mapdenorm.x = row['x']
mapdenorm.y = row['y']
mapdenorm.z = row['z']
if row['typeID']:
mapdenorm.type = EVEInventoryType.objects.get(id=row['typeID'])
if row['groupID']:
mapdenorm.group = EVEInventoryGroup.objects.get(id=row['groupID'])
if row['solarSystemID']:
mapdenorm.solar_system = EVESolarSystem.objects.get(id=row['solarSystemID'])
if row['constellationID']:
mapdenorm.constellation = EVEConstellation.objects.get(id=row['constellationID'])
if row['regionID']:
mapdenorm.region = EVERegion.objects.get(id=row['regionID'])
mapdenorm.save()
c.close()我对用Django ORM包装这个SQLite DB一点也不感兴趣。我真的很想弄清楚如何在不占用所有RAM的情况下传输数据。
发布于 2010-03-10 23:39:18
我太傻了,这个问题已经在Django FAQ中解决了。
在调试模式下需要清除数据库查询缓存。
from django import db
db.reset_queries()发布于 2010-03-10 22:30:31
我认为使用select * from mapDenormalize并将结果加载到内存中总是不好的主意。我的建议是-将脚本分成块。使用LIMIT获取部分数据。
获取第一部分,使用它,靠近光标,然后获取下一部分。
https://stackoverflow.com/questions/2417572
复制相似问题