#8573: inspectdb doesn't make use of FK and uniqueness information when the
column
name has upper case characters
------------------------------------------------+---------------------------
Reporter: ramiro | Owner: nobody
Status: new | Milestone:
Component: django-admin.py inspectdb | Version: SVN
Resolution: | Keywords:
Stage: Unreviewed | Has_patch: 1
Needs_docs: 0 | Needs_tests: 0
Needs_better_patch: 0 |
------------------------------------------------+---------------------------
Changes (by ramiro):
* summary: inspectdb doesn't make use of FK information when the column
name has upper case characters => inspectdb
doesn't make use of FK and uniqueness
information when the column name has upper case
characters
Old description:
> This was reported as an [http://code.google.com/p/django-
> pyodbc/issues/detail?id=12 issue] in the [http://code.google.com/p
> /django-pyodbc/ 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 `attname` 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 a related problem, it can attempt to use that same
> `attname` instead of the real table column in the `db_column` field
> option.
>
> Example:
>
> This `models.py` file:
>
> {{{
> #!python
> 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 `syncdb`ed to the database (sqlite3) and the introspected back
> gives:
>
> {{{
> #!python
> 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
> `'primary_key=True'` and `db_column='Ident'` options, 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.
New description:
This was reported as an [http://code.google.com/p/django-
pyodbc/issues/detail?id=12 issue] in the [http://code.google.com/p/django-
pyodbc/ 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:
{{{
#!python
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 `syncdb`ed to the database (sqlite3) and the introspected back gives:
{{{
#!python
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:
a. 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.)
b. The `db_column='Ident'` option
--
Ticket URL: <http://code.djangoproject.com/ticket/8573#comment:2>
Django Code <http://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 post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---