Django.db.utils.IntegrityError: UNIQUE constraint failed: items_auction.auction_id только при bulk_create
У меня есть модель под названием "Аукцион", у нее есть уникальное поле pk под названием auction_id. Сейчас у меня много данных (более 50k записей) и проблема в том, что когда база данных не пуста и я пытаюсь загрузить очередную партию записей с помощью bulk_create, выскакивает ошибка.
Вот мой скрипт для заполнения данных
auctions = [
Auction(
auction_id=row[0],
price=row[1],
quantity=row[2],
item_id=row[3],
auctioned_item=Item.objects.get(item_id=row[3]) if Item.objects.filter(item_id=row[3]).exists() else None,
realm_id = realm_id
)
for row in reader
]
items = []
for auction in auctions:
if Auction.objects.filter(pk=auction.auction_id).exists():
Auction.objects.get(pk=auction.auction_id).delete()
try:
item = auction.auctioned_item
if item not in items:
item.last_auctioned_date = datetime.now()
items.append(item)
except:
pass
Auction.objects.bulk_create(objs=auctions, ignore_conflicts=True)
Item.objects.bulk_update(items, ["last_auctioned_date"])
Вот полная ошибка
Traceback (most recent call last):
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 423, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: items_auction.auction_id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\models\query.py", line 502, in bulk_create
returned_columns = self._batched_insert(
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\models\query.py", line 1293, in _batched_insert
self._insert(item, fields=fields, using=self.db, ignore_conflicts=ignore_conflicts)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\models\query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1416, in execute_sql
cursor.execute(sql, params)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\utils.py", line 98, in execute
return super().execute(sql, params)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\utils.py", line 79, in _execute
with self.db.wrap_database_errors:
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\kacpe\Desktop\praca_inz\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 423, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: UNIQUE constraint failed: items_auction.auction_id
Это происходит только при использовании bulk_create, при использовании get_or_create или просто create ошибка не проявляется. Самое странное, что когда я использую bulk_create(ignore_conflicts=True) и после этого проверяю записи на дубликаты, их нет, и все выглядит нормально. Так в чем же здесь проблема?