#34523: update_or_create not work in parallel insertion
-------------------------------------+-------------------------------------
Reporter: gatello-s | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 4.2
(models, ORM) |
Severity: Normal | Resolution:
Keywords: update_or_create | Triage Stage:
TransactionManagementError | Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by David Sanders):
Ah sorry I had an environment issue , here's the exception I'm getting for
3.2.16:
{{{
======================================================================
ERROR: test_update_or_create
(ticket_34523.tests.TransactionManagementErrorTest.test_update_or_create)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/query.py", line 581, in get_or_create
return self.get(**kwargs), False
^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/query.py", line 435, in get
raise self.model.DoesNotExist(
ticket_34523.tests.TransactionManagementErrorTest.TestModel.DoesNotExist:
TestModel matching query does not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/backends/sqlite3/base.py", line 423, in execute
return Database.Cursor.execute(self, query, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.IntegrityError: UNIQUE constraint failed:
test_model_update_or_create.id
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/dsanders/projects/django-sample-3_2/ticket_34523/tests.py",
line 42, in test_update_or_create
self.TestModel.objects.update_or_create(id=1, defaults={"field": 2})
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/query.py", line 608, in update_or_create
obj, created = self.select_for_update().get_or_create(defaults,
**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/query.py", line 588, in get_or_create
return self.create(**params), True
^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-3_2/ticket_34523/tests.py",
line 16, in create
return super().create(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/query.py", line 453, in create
obj.save(force_insert=True, using=self.db)
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/base.py", line 739, in save
self.save_base(using=using, force_insert=force_insert,
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/base.py", line 776, in save_base
updated = self._save_table(
^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/base.py", line 881, in _save_table
results = self._do_insert(cls._base_manager, using, fields,
returning_fields, raw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/base.py", line 919, in _do_insert
return manager._insert(
^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/query.py", line 1270, in _insert
return query.get_compiler(using=using).execute_sql(returning_fields)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
cursor.execute(sql, params)
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/backends/utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False,
executor=self._execute)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/backends/utils.py", line 79, in _execute
with self.db.wrap_database_errors:
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/site-
packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/dsanders/projects/django-sample-
3_2/.direnv/python-3.11.2/lib/python3.11/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:
test_model_update_or_create.id
----------------------------------------------------------------------
Ran 1 test in 1.192s
FAILED (errors=1)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/34523#comment:4>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/01070187c2c4b418-e3b4951f-1986-4aea-8e9f-85697323326b-000000%40eu-central-1.amazonses.com.