我在一家拥有大型数据库的公司中工作,我想对其执行一些更新查询,但是这似乎会导致巨大的内存泄漏 查询如下
Select EventTime, EventType , CUSTOMER_NAME AS FolderID FROM Table1, Table2 Where Table1.FolderID = Table2.fid;
我是在django的交互式外壳中写的
我什至尝试使用
c= CallLog.objects.all()
for i in c:
i.cdate = pytz.utc.localize(datetime.datetime.strptime(i.fixed_date, "%y-%m-%d %H:%M"))
i.save()
但是它不起作用,您是否知道如何检测
的来源我正在处理的数据集大约是27毫米
fixed_date是计算所得的属性
答案 0 :(得分:0)
您可以尝试这样的事情:
from django.core.paginator import Paginator
p = Paginator(CallLog.objects.all().only('cdate'), 2000)
for page in range(1, p.num_pages + 1):
for i in p.page(page).object_list:
i.cdate = pytz.utc.localize(datetime.datetime.strptime(i.fixed_date, "%y-%m-%d %H:%M"))
i.save()
切片查询集不会仅将内存中的所有对象加载到一个子集,而是会在命中数据库之前为SQL查询添加限制和偏移量。
答案 1 :(得分:0)
您可以尝试分批迭代查询集;请参见.iterator()
方法。看看是否有任何改善
for obj in CallLog.objects.all():
obj.cdate = pytz.utc.localize(
datetime.datetime.strptime(obj.fixed_date, "%y-%m-%d %H:%M"))
obj.save()
这是我发现的一个相关answer,但它已经有几年历史了。
答案 2 :(得分:0)
尝试将其分成小块(因为您只有4GB的内存)
places_for_dynamo.py| sculptures_upload.py| google_places.py| sculptures_upload.py
在必要时,我通常使用字符或数字(在1,2,3,4等中输入的ID)