Opened 8 years ago
Closed 6 years ago
#27946 closed Cleanup/optimization (fixed)
Improve "ValueError: Found wrong number of constraints" error message
Reported by: | Robin Elvin | Owned by: | nobody |
---|---|---|---|
Component: | Migrations | Version: | 1.8 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I had a model which had a unique_together constraint defined. Now I wish to remove this so the unique_together was removed from the model and a migration created. When applying the migration the following error occurred:
Applying main.0091_auto_20170316_1046...Traceback (most recent call last): File "manage.py", line 8, in <module> execute_from_command_line(sys.argv) File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute_from_command_line utility.execute() File "/usr/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 346, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 222, in handle executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) File "/usr/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 110, in migrate self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) File "/usr/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 148, in apply_migration state = migration.apply(state, schema_editor) File "/usr/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 115, in apply operation.database_forwards(self.app_label, schema_editor, old_state, project_state) File "/usr/local/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 359, in database_forwards getattr(new_model._meta, self.option_name, set()), File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 320, in alter_unique_together self._delete_composed_index(model, fields, {'unique': True}, self.sql_delete_unique) File "/usr/local/lib/python2.7/site-packages/django/db/backends/mysql/schema.py", line 80, in _delete_composed_index return super(DatabaseSchemaEditor, self)._delete_composed_index(model, fields, *args) File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 349, in _delete_composed_index ", ".join(columns), ValueError: Found wrong number (0) of constraints for main_projectdrivefile(name, directory_id)
The model's Meta before starting which was subsequently removed prior to creating the migration:
class Meta: unique_together = ('name', 'directory')
The migration created looks like this:
class Migration(migrations.Migration): dependencies = [ ('main', '0090_auto_20170314_1033'), ] operations = [ migrations.AlterUniqueTogether( name='projectdrivefile', unique_together=set([]), ), ]
Steps to reproduce:
- Create a model with a unique_together constraint
- Create a migration for this model with makemigrations
- Apply migration
- Remove unique_together completely
- Create a migration for this model with makemigrations
- Apply migration
Note: There appears to have been at least 1 report of this bug previously but the reporter could not recreate so the bug was closed.
Change History (5)
comment:1 by , 8 years ago
Description: | modified (diff) |
---|
comment:2 by , 8 years ago
Type: | Uncategorized → Bug |
---|
comment:3 by , 8 years ago
This is on MySQL.
In the course of trying to recreate this issue I have discovered that the issue stems from the fact that the table does not have the UNIQUE KEY currently. I am unsure as to how this has happened but this means that the table is not consistent with the migrations. I have manually added the UNIQUE KEY back using ALTER TABLE and successfully applied the migration.
So, I don't know if this is something migrations should handle. Given that the desired state of the model is in effect what it is currently should it just ignore the error? Or perhaps the error message should be more descriptive as this threw me off the scent for quite a while.
comment:4 by , 8 years ago
Summary: | Removing unique_together creates invalid migration → Improve "ValueError: Found wrong number of constraints" error message |
---|---|
Triage Stage: | Unreviewed → Accepted |
Type: | Bug → Cleanup/optimization |
Perhaps the error message could be improved. I've seen several tickets reporting this error message as a bug in Django when as you mentioned, it really has to do with the fact that the database is in an unexpected state.
comment:5 by , 6 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
This appears to have been fixed by the following: https://code.djangoproject.com/ticket/29480
Which database are you using? Can you reproduce the issue with Django's master branch or a version newer than 1.8?