mirror of
https://github.com/django/django.git
synced 2025-09-26 12:09:19 +00:00
Used commit_on_success_unless_managed to make ORM operations atomic.
This commit is contained in:
parent
86fd920f67
commit
4dbd1b2dd8
3 changed files with 38 additions and 77 deletions
|
@ -442,12 +442,7 @@ class QuerySet(object):
|
|||
self._for_write = True
|
||||
connection = connections[self.db]
|
||||
fields = self.model._meta.local_fields
|
||||
if transaction.get_autocommit(using=self.db):
|
||||
transaction.enter_transaction_management(using=self.db, forced=True)
|
||||
forced_managed = True
|
||||
else:
|
||||
forced_managed = False
|
||||
try:
|
||||
with transaction.commit_on_success_unless_managed(using=self.db):
|
||||
if (connection.features.can_combine_inserts_with_and_without_auto_increment_pk
|
||||
and self.model._meta.has_auto_field):
|
||||
self._batched_insert(objs, fields, batch_size)
|
||||
|
@ -458,11 +453,6 @@ class QuerySet(object):
|
|||
if objs_without_pk:
|
||||
fields= [f for f in fields if not isinstance(f, AutoField)]
|
||||
self._batched_insert(objs_without_pk, fields, batch_size)
|
||||
if forced_managed:
|
||||
transaction.commit(using=self.db)
|
||||
finally:
|
||||
if forced_managed:
|
||||
transaction.leave_transaction_management(using=self.db)
|
||||
|
||||
return objs
|
||||
|
||||
|
@ -579,18 +569,8 @@ class QuerySet(object):
|
|||
self._for_write = True
|
||||
query = self.query.clone(sql.UpdateQuery)
|
||||
query.add_update_values(kwargs)
|
||||
if transaction.get_autocommit(using=self.db):
|
||||
transaction.enter_transaction_management(using=self.db, forced=True)
|
||||
forced_managed = True
|
||||
else:
|
||||
forced_managed = False
|
||||
try:
|
||||
with transaction.commit_on_success_unless_managed(using=self.db):
|
||||
rows = query.get_compiler(self.db).execute_sql(None)
|
||||
if forced_managed:
|
||||
transaction.commit(using=self.db)
|
||||
finally:
|
||||
if forced_managed:
|
||||
transaction.leave_transaction_management(using=self.db)
|
||||
self._result_cache = None
|
||||
return rows
|
||||
update.alters_data = True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue