#24274: migrations break fixtures
-------------------------------+--------------------
Reporter: yuriiz | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 1.7
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------
Since Django 1.7 syncdb does not work if there are fixtures including
objects from apps having migrations because currently syncdb/migrate does
following:
1. Create tables for unmigrated apps
2. Load initial_data.json
3. Apply migrations
If one would like to have instances of models from app having migration in
initial_data.json syncdb will break with smth like this:
{{{
Operations to perform:
Synchronize unmigrated apps: google, allauth, widget_tweaks, flatpages,
facebook
Apply all migrations: account, sessions, admin, sites, auth,
contenttypes, socialaccount
Synchronizing apps without migrations:
Creating tables...
Creating table django_flatpage_sites
Creating table django_flatpage
Installing custom SQL...
Installing indexes...
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/__init__.py", line 385, in
execute_from_command_line
utility.execute()
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/base.py", line 533, in handle
return self.handle_noargs(**options)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/commands/syncdb.py", line 27, in
handle_noargs
call_command("migrate", **options)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/__init__.py", line 115, in call_command
return klass.execute(*args, **defaults)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/commands/migrate.py", line 128, in handle
created_models = self.sync_apps(connection,
executor.loader.unmigrated_apps)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/commands/migrate.py", line 298, in
sync_apps
call_command('loaddata', 'initial_data', verbosity=self.verbosity,
database=connection.alias, skip_validation=True, app_label=app_label,
hide_empty=True)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/__init__.py", line 115, in call_command
return klass.execute(*args, **defaults)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/commands/loaddata.py", line 61, in handle
self.loaddata(fixture_labels)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/commands/loaddata.py", line 91, in
loaddata
self.load_label(fixture_label)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/management/commands/loaddata.py", line 148, in
load_label
obj.save(using=self.using)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/core/serializers/base.py", line 173, in save
models.Model.save_base(self.object, using=using, raw=True)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/models/base.py", line 617, in save_base
updated = self._save_table(raw, cls, force_insert, force_update,
using, update_fields)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/models/base.py", line 679, in _save_table
forced_update)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/models/base.py", line 723, in _do_update
return filtered._update(values) > 0
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/models/query.py", line 600, in _update
return query.get_compiler(self.db).execute_sql(CURSOR)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/models/sql/compiler.py", line 1004, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/models/sql/compiler.py", line 786, in execute_sql
cursor.execute(sql, params)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/backends/utils.py", line 81, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/backends/utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "/home/user/myproject/local/lib/python2.7/site-
packages/django/db/backends/sqlite3/base.py", line 485, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: Problem installing fixture
'/home/user/myproject/initial_data.json': Could not load
socialaccount.SocialApp(pk=1): no such table: socialaccount_socialapp
}}}
The proper sequence of actions that syncdb/migrate does should be:
1. Create tables for unmigrated apps
2. Apply migrations
3. Load initial_data.json
--
Ticket URL: <https://code.djangoproject.com/ticket/24274>
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 post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/049.5c9e9ee309c8f82dcaccf2e88ef09cb6%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.