Как быстро проверить, все ли элементы в списке первичных ключей существуют до вызова bulk_create?
Я пытаюсь сделать django bulk_create для списка объектов. Однако, каждый раз один из объектов в bulk_create уже существует (его первичный ключ уже был выделен), поэтому возникает исключение и объекты не создаются. Чтобы исправить это, я добавил цикл по каждому из новых объектов, чтобы проверить, существуют ли они до вызова bulk_create, но это кажется очень неэффективным. Есть ли способ достичь того же результата меньшим количеством запросов к базе данных?
Получите все записи из вашей базы данных один раз. Затем проверьте, нет ли дубликатов. Устраните их и выполните массовое создание.
Зависит от того, какую базу данных вы используете. Если, например, вы используете Oracle, то, возможно, есть варианты с пользовательскими процедурами PL/SQL, которые вы можете создать. Я не знаю PL/SQL, но я просто уверен, что если это язык, то должны быть варианты...
.
Я думаю, что это возможно непосредственно с Django Queryset API, если вы используете последнюю версию Django.
Начиная с Django 2.2, bulk_create включает параметр ignore_conflicts, который продолжит выполнение bulk_create при обнаружении ошибки.
Это избавляет вас от необходимости делать дополнительные запросы. Вы можете ознакомиться с документацией здесь: https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create