#24424: Removing a model's last field results in SQL syntax error on SQLite ----------------------------+------------------------------------ Reporter: adnam | Owner: Type: Bug | Status: new Component: Migrations | Version: 1.7 Severity: Normal | Resolution: Keywords: | Triage Stage: Accepted Has patch: 1 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 1 Easy pickings: 0 | UI/UX: 0 ----------------------------+------------------------------------
Comment (by jwineinger): The case below is nearly exactly the same one I ran into. {{{#!python # models.py from django.db import models class Thing(models.Model): pass class Blob(Thing): pass # 0001_initial.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ] operations = [ migrations.CreateModel( name='Thing', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ], ), migrations.CreateModel( name='Blob', fields=[ ('thing_ptr', models.OneToOneField(auto_created=True, parent_link=True, primary_key=True, serialize=False, to='app_a.Thing')), ], bases=('app_a.thing',), ), ] }}} Making `Thing` inherit a new model `Bar`: {{{#!python # models.py from django.db import models class Bar(models.Model): pass # 0002_auto.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ('thing', '0001_initial'), ] operations = [ migrations.RemoveField( model_name='blob', name='thing_ptr', ), migrations.DeleteModel( name='Blob', ), ] }}} {{{ ./manage.py migrate Operations to perform: Synchronize unmigrated apps: staticfiles, messages Apply all migrations: auth, admin, thing, sessions, contenttypes Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying sessions.0001_initial... OK Applying thing.0001_initial... OK Applying thing.0002_auto_20150415_0113...Traceback (most recent call last): File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/sqlite3/base.py", line 318, in execute return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: near ")": syntax error The above exception was the direct cause of the following exception: Traceback (most recent call last): File "./manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/core/management/__init__.py", line 338, in execute_from_command_line utility.execute() File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/core/management/__init__.py", line 330, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/core/management/base.py", line 390, in run_from_argv self.execute(*args, **cmd_options) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/core/management/base.py", line 441, in execute output = self.handle(*args, **options) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/core/management/commands/migrate.py", line 221, in handle executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/migrations/executor.py", line 110, in migrate self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/migrations/executor.py", line 147, in apply_migration state = migration.apply(state, schema_editor) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/migrations/migration.py", line 115, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/migrations/operations/fields.py", line 121, in database_forwards schema_editor.remove_field(from_model, from_model._meta.get_field(self.name)) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/sqlite3/schema.py", line 194, in remove_field self._remake_table(model, delete_fields=[field]) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/sqlite3/schema.py", line 144, in _remake_table self.quote_name(model._meta.db_table), File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/base/schema.py", line 107, in execute cursor.execute(sql, params) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/utils.py", line 79, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/utils.py", line 97, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/utils/six.py", line 658, in reraise raise value.with_traceback(tb) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/Users/jawineinger/venvs/test/lib/python3.4/site- packages/django/db/backends/sqlite3/base.py", line 318, in execute return Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: near ")": syntax error }}} -- Ticket URL: <https://code.djangoproject.com/ticket/24424#comment:23> 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 django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/063.30f9d07e031525bcc24fd1019c10b5b6%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.