Opened 2 years ago
Closed 2 years ago
#34827 closed Bug (invalid)
select_for_update example raises TransactionManagementError
| Reported by: | Jim Nicholls | Owned by: | nobody |
|---|---|---|---|
| Component: | Documentation | Version: | 4.2 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
The example for select_for_update at https://docs.djangoproject.com/en/4.2/ref/models/querysets/#select-for-update shows select_for_update being used before starting the transaction. With Django 4.2.5, this raises a TransactionManagementError.
Traceback (most recent call last):
File "/site-packages/django/db/models/query.py", line 633, in get
num = len(clone)
File "/site-packages/django/db/models/query.py", line 380, in __len__
self._fetch_all()
File "/site-packages/django/db/models/query.py", line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/site-packages/django/db/models/query.py", line 91, in __iter__
results = compiler.execute_sql(
File "/site-packages/django/db/models/sql/compiler.py", line 1549, in execute_sql
sql, params = self.as_sql()
File "/site-packages/django/db/models/sql/compiler.py", line 816, in as_sql
raise TransactionManagementError(
django.db.transaction.TransactionManagementError: select_for_update cannot be used outside of a transaction.
I think the example should be:
from django.db import transaction with transaction.atomic(): entries = Entry.objects.select_for_update().filter(author=request.user) for entry in entries: ...
Change History (2)
comment:1 by , 2 years ago
| Description: | modified (diff) |
|---|
comment:2 by , 2 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Querysets are lazily evaluated, and thus only the evaluating part needs to be run within a transaction