减少循环遍历多个对象以获取 Django 值的时间
Reduce time for Loop over multiple objects to get value Django
我有一个 Dataframe,其中列 Code
每天都会显着增加,这些代码将被转换为对象描述,我正在为此做如下操作:
product = []
beacon = []
count = []
c_start = time.time()
for i, v in df["D Code"].iteritems():
product.append(Product.objects.get(short_code=v[:2]).description) #how to optimize this?
beacon.append("RFID")
count.append(v[-5:])
c_end = time.time()
print("D Code loop time ", c_end-c_start)
现在,最初当行数较少时,它可以立即工作,但随着数据的增加,对每个代码的组合数据库调用需要花费太多时间。有没有更有效的 Django 方法来遍历列表并获取值?
df['D Code
]` 看起来像这样:
['TRRFF.1T22AD0029',
'TRRFF.1T22AD0041',
'TRRFF.1T22AD0009',
'TRRFF.1T22AD0032',
'TRRFF.1T22AD0028',
'TRRFF.1T22AD0026',
'TRRFF.1T22AD0040',
'HTRFF.1T22AD0003',
'TRRFF.1T22AD0048',
'PPRFP.1T22AD0017',
'TRRFF.1T22AD0047',
'TRRFF.1T22AD0005',
'TRRFF.1T22AD0033',
'TRRFF.1T22AD0024',
'TRRFF.1T22AD0042'],
您可以只用一个查询创建一个查找字典。然后使用该字典查找您的描述。
description_dict = {}
for product in Product.objects.values('short_code', 'description'):
description_dict[product['short_code'] = product['description']
for i, v in df["D Code"].iteritems():
product.append(description_dict[v[:2]])
...
我有一个 Dataframe,其中列 Code
每天都会显着增加,这些代码将被转换为对象描述,我正在为此做如下操作:
product = []
beacon = []
count = []
c_start = time.time()
for i, v in df["D Code"].iteritems():
product.append(Product.objects.get(short_code=v[:2]).description) #how to optimize this?
beacon.append("RFID")
count.append(v[-5:])
c_end = time.time()
print("D Code loop time ", c_end-c_start)
现在,最初当行数较少时,它可以立即工作,但随着数据的增加,对每个代码的组合数据库调用需要花费太多时间。有没有更有效的 Django 方法来遍历列表并获取值?
df['D Code
]` 看起来像这样:
['TRRFF.1T22AD0029',
'TRRFF.1T22AD0041',
'TRRFF.1T22AD0009',
'TRRFF.1T22AD0032',
'TRRFF.1T22AD0028',
'TRRFF.1T22AD0026',
'TRRFF.1T22AD0040',
'HTRFF.1T22AD0003',
'TRRFF.1T22AD0048',
'PPRFP.1T22AD0017',
'TRRFF.1T22AD0047',
'TRRFF.1T22AD0005',
'TRRFF.1T22AD0033',
'TRRFF.1T22AD0024',
'TRRFF.1T22AD0042'],
您可以只用一个查询创建一个查找字典。然后使用该字典查找您的描述。
description_dict = {}
for product in Product.objects.values('short_code', 'description'):
description_dict[product['short_code'] = product['description']
for i, v in df["D Code"].iteritems():
product.append(description_dict[v[:2]])
...