我在3000次循环中调用一个函数。我正在调用该函数并从该函数获取一些字典,但这需要时间。我正在从数据库中获取数据,这给了我大约3000行,并且正在循环这些行并在该循环中调用函数,该循环从数据库中获取数据并返回字典,但这需要时间。
码:
def test(request, uni_id):
try:
Obj = get_object_or_404(tabl_name, id=uni_id)
except:
Obj = None
dict = {}
if Obj:outlet_info
dict['data1'] = Obj.id
dict['data2'] = Obj.name
dict['data3'] = Obj.eg
dict['data4'] = Obj.access
return dict
cursor.execute('''SELECT cd.name, cd.no,ofk.demo_id
FROM `main_table` as myo
LEFT JOIN `table1` as emt ON emt.some_id = myo.some1_id
LEFT JOIN `table2` as ofk ON ofk.id = myo.kit_id
LEFT JOIN `table3` as cd ON cd.eg_id = myo.eg_id
WHERE emt.type='test''''
result = dictfetchall(cursor)
tmp_list, tmp_dict = [], {}
for res in result:
tmp_dict['name'] = res['name']
tmp_dict['no'] = res['no']
info = test(request,res['demo_id'])
tmp_dict['data1'] = info['data1']
tmp_list.append(tmp_dict.copy())
在这里,我从查询中获取
demo_id
并将其传递给使用函数test
来获取数据的另一个查询,因此这花费了太多时间。谁能告诉我如何提高速度或在主查询中包含
demo_id
并从主查询中获取数据? 最佳答案
您正在进行3000次db调用(通过调用get_object_or_404
3k次),这肯定会变慢。相反,您应该尝试通过tablemanager.filter(id__in=id_list)
获取对象。循环准备id_list并将该列表传递给您的测试函数。