Opened 16 years ago

Last modified 16 years ago

#8573 closed

inspectdb doesn't make use of FK and uniqueness information when the column name has upper case characters — at Version 2

Reported by: Ramiro Morales Owned by: nobody
Component: django-admin.py inspectdb Version: dev
Severity: Keywords:
Cc: Triage Stage: Unreviewed
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Ramiro Morales)

This was reported as an issue in the django-pyodbc project but after some debugging turned to be a bug in inspectdb.

Problem is it doesn't use the real database column name but rather a derived att_name value (used to represent the final Django model field name) when looking up the meta information about FK and indexes the DB backend provides via the DatabaseIntrospection.get_relations() method. This fails for database engines that are case sensitive (i.e. all but Oracle).

Also, because of a related problem, it can attempt to use that same innaccurate att_name instead of the real table column when trying to introspect the db_column field option.

Example:

This models.py file:

class Magazine(models.Model):
    ident = models.AutoField(primary_key=True, db_column='Ident')

class ReaderComment(models.Model):
    text = models.TextField(max_length=30, primary_key=True, db_column='reader_comment')

when syncdbed to the database (sqlite3) and the introspected back gives:

class IntrosBugMagazine(models.Model):
    ident = models.IntegerField()
    class Meta:
        db_table = u'intros_bug_magazine'

class IntrosBugReadercomment(models.Model):
    reader_comment = models.TextField(primary_key=True)
    class Meta:
        db_table = u'intros_bug_readercomment'

Note the ident field of the Magazine model is missing:

  1. The 'primary_key=True'option(that's because the syncdb command didn't make use of the 'primary_key': True info the database backend introspection support code correctly returned for it.)
  2. The db_column='Ident' option

Change History (3)

by Ramiro Morales, 16 years ago

comment:1 by Ramiro Morales, 16 years ago

Has patch: set

comment:2 by Ramiro Morales, 16 years ago

Description: modified (diff)
Summary: inspectdb doesn't make use of FK information when the column name has upper case charactersinspectdb doesn't make use of FK and uniqueness information when the column name has upper case characters
Note: See TracTickets for help on using tickets.
Back to Top