Сокращение времени на цикл перебора нескольких объектов для получения значения 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]])
        ...
Вернуться на верх