Можно ли уменьшить количество подключений к БД? - PullRequest
0 голосов
/ 23 января 2019

В настоящее время мое приложение Django содержит миллионы записей, и я хочу обновить его на основе значения ManyToMany связанных полей.

Следовательно, то, что я сделал, работает, но это заняло так много раз. Чтобы обновить только три записи, он использует 13 запросов.

Record модель имеет поле genres, которое является полем ManyToMany. Также имеет поле authors, которое также является полем ManyToMany.

И, наконец, модель Author имеет поле ManyToMany, которое подразумевает genres.

for i in Record.objects.filter(authors__popular=True).only("authors", "genres"): 
    for a in i.authors.all(): 
        print(a.name)  # test purpose
        for genre in i.genres.all(): 
            if a.genres.exists(): 
                a.genres.add(genre)

Когда я запускаю len(connection.queries), он показывает номера запросов, которые выполнялись, я хочу, чтобы он был меньше 13.

1 Ответ

0 голосов
/ 24 января 2019

Пока я просто уменьшил номер запроса до 1 для 1 записи. Вот как я достиг

for i in Author.objects.annotate(record_count=Count('record'), record_genres=ArrayAgg('record__genres', distinct=True):
    if i.record_count > 0 and i.record_genres:
        i.genres.set(i.record_genres)
        i.save()
...