Opened 11 years ago
Closed 9 years ago
#24113 closed New feature (needsinfo)
django.db.backends.sqlite3.introspection.get_constraints does not return constraint names.
| Reported by: | Damien Nozay | Owned by: | nobody | 
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | dev | 
| 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
django.db.backends.sqlite3.introspection.get_constraints does not return constraint names.
I was trying to add a regression test for https://github.com/django/django/pull/3862 .
However the introspection does not get the constraint names properly.
Here is how you would get the equivalent of show create table in sqlite3.
cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s", [table]) result = cursor.fetchall()[0]
e.g. this is the output for tests.schema.models.UniqueTest
[(u'CREATE TABLE "schema_uniquetest" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "year" integer NOT NULL, "slug" varchar(50) NOT NULL, CONSTRAINT "schema_uniquetest_year_4b36f60cc3fa9c74_uniq" UNIQUE ("year", "slug"))',),
vs. the output of connection.introspection.get_constraints
{'__primary__': {'check': False,
                 'columns': [u'id'],
                 'foreign_key': False,
                 'index': False,
                 'primary_key': True,
                 'unique': False},
 u'schema_uniquetest_2dbcba41': {'check': False,
                                 'columns': [u'slug'],
                                 'foreign_key': False,
                                 'index': True,
                                 'primary_key': False,
                                 'unique': False},
 u'sqlite_autoindex_schema_uniquetest_1': {'check': False,
                                           'columns': [u'year', u'slug'],
                                           'foreign_key': False,
                                           'index': True,
                                           'primary_key': False,
                                           'unique': True}}
side note: would be helpful to refactor django.db.backends.schema so that create_model uses a helper function that generates the sql statements; which whould make it possible to inspect the sql more easily in tests.
Change History (2)
comment:1 by , 11 years ago
| Component: | Uncategorized → Database layer (models, ORM) | 
|---|---|
| Triage Stage: | Unreviewed → Accepted | 
| Type: | Uncategorized → New feature | 
| Version: | 1.7 → master | 
comment:2 by , 9 years ago
| Resolution: | → needsinfo | 
|---|---|
| Status: | new → closed | 
I have tried a bit but was unable to reproduce that index name mismatch. Could you please provide some test case where this difference would show up?