减少循环遍历多个对象以获取 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]])
        ...