Refs #8138 -- Added a stealth option to the loaddata command so that the use of transactions in loaddata can be disabled. This behavior isn't enabled as a commad line option because it doesn't make much sense, but it can be used when invoking loaddata from another script.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8336 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2008-08-13 14:36:40 +00:00
parent cb1368bbc6
commit 4edbb8b2ca
1 changed files with 21 additions and 10 deletions

View File

@ -29,6 +29,14 @@ class Command(BaseCommand):
verbosity = int(options.get('verbosity', 1)) verbosity = int(options.get('verbosity', 1))
show_traceback = options.get('traceback', False) show_traceback = options.get('traceback', False)
# commit is a stealth option - it isn't really useful as
# a command line option, but it can be useful when invoking
# loaddata from within another script.
# If commit=True, loaddata will use its own transaction;
# if commit=False, the data load SQL will become part of
# the transaction in place when loaddata was invoked.
commit = options.get('commit', True)
# Keep a count of the installed objects and fixtures # Keep a count of the installed objects and fixtures
fixture_count = 0 fixture_count = 0
object_count = 0 object_count = 0
@ -44,9 +52,10 @@ class Command(BaseCommand):
# Start transaction management. All fixtures are installed in a # Start transaction management. All fixtures are installed in a
# single transaction to ensure that all references are resolved. # single transaction to ensure that all references are resolved.
transaction.commit_unless_managed() if commit:
transaction.enter_transaction_management() transaction.commit_unless_managed()
transaction.managed(True) transaction.enter_transaction_management()
transaction.managed(True)
app_fixtures = [os.path.join(os.path.dirname(app.__file__), 'fixtures') for app in get_apps()] app_fixtures = [os.path.join(os.path.dirname(app.__file__), 'fixtures') for app in get_apps()]
for fixture_label in fixture_labels: for fixture_label in fixture_labels:
@ -153,8 +162,9 @@ class Command(BaseCommand):
for line in sequence_sql: for line in sequence_sql:
cursor.execute(line) cursor.execute(line)
transaction.commit() if commit:
transaction.leave_transaction_management() transaction.commit()
transaction.leave_transaction_management()
if object_count == 0: if object_count == 0:
if verbosity > 1: if verbosity > 1:
@ -167,4 +177,5 @@ class Command(BaseCommand):
# edge case in MySQL: if the same connection is used to # edge case in MySQL: if the same connection is used to
# create tables, load data, and query, the query can return # create tables, load data, and query, the query can return
# incorrect results. See Django #7572, MySQL #37735. # incorrect results. See Django #7572, MySQL #37735.
connection.close() if commit:
connection.close()