﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
28789	Django won't update sqlite_master table using migrations.AlterModelTable, which causes loaddata to fail.	Rafael Pires	nobody	"I created a migration to rename a model table:


{{{
class Migration(migrations.Migration):

    dependencies = [
        ('assessment', '0105_previous_migration'),
    ]

    operations = [
        migrations.AlterModelTable(name='MyModel', table='myapp_newmymodel')
    ]

}}}

I can run this migration just fine, the table gets renamed and the project runs fine when I access it through my browser (with SQLite3 and MySQL).

The problem is that: then I run ""./manage.py test"" the test fails to load the fixtures in the SQLite3 database:


{{{
./manage.py test assessment.tests.test_models
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: setUpClass (assessment.tests.test_models.ModelsTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/user/virtualenv/myproject/local/lib/python2.7/site-packages/django/test/testcases.py"", line 1036, in setUpClass
    'database': db_name,
  File ""/home/user/virtualenv/myproject/local/lib/python2.7/site-packages/django/core/management/__init__.py"", line 131, in call_command
    return command.execute(*args, **defaults)
  File ""/home/user/virtualenv/myproject/local/lib/python2.7/site-packages/django/core/management/base.py"", line 330, in execute
    output = self.handle(*args, **options)
  File ""/home/user/virtualenv/myproject/local/lib/python2.7/site-packages/django/core/management/commands/loaddata.py"", line 69, in handle
    self.loaddata(fixture_labels)
  File ""/home/user/virtualenv/myproject/local/lib/python2.7/site-packages/django/core/management/commands/loaddata.py"", line 115, in loaddata
    connection.check_constraints(table_names=table_names)
  File ""/home/user/virtualenv/myproject/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py"", line 286, in check_constraints
    column_name, referenced_column_name,
  File ""/home/user/virtualenv/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/virtualenv/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/virtualenv/myproject/local/lib/python2.7/site-packages/django/db/backends/utils.py"", line 63, in execute
    return self.cursor.execute(sql)
  File ""/home/user/virtualenv/myproject/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py"", line 326, in execute
    return Database.Cursor.execute(self, query)
OperationalError: Problem installing fixtures: no such table: myapp_mymodel
}}}

*This table id is used by other tables as Foreign Key.*

I looked into the code and it seems that the **migrations.AlterModelTable** is not updating the sqlite_master table, so other tables that references my new table with a Foreign Key are still pointing to myapp_mymodel instead of myapp_newmymodel. This happens during **check_constraints** execution, the sqlite3 backend gets the key columns using **get_key_columns** function, that reads the ""CREATE TABLE"" query in sqlite_master, but since the sqlite_master table wasn't updated correctly, the process fails.

Just to be sure I ran ""ALTER TABLE myapp_mymodel RENAME TO myapp_newmymodel"" directly on the database and the sqlite_master table is updated correctly.

I also ran **cursor.execute(""ALTER TABLE myapp_mymodel RENAME TO myapp_newmymodel"")** instead of **migrations.AlterModelTable** in the migration, but the problem is the same: sqlite3 backend won't update sqlite_master references.

Database: SQLite3
Django version: 1.11.5"	Bug	new	Database layer (models, ORM)	1.11	Normal		migrations, sqlite3		Unreviewed	0	0	0	0	0	0
