#27977: inspectdb errors after upgrade to cx_Oracle 5.3
-------------------------------------+-------------------------------------
     Reporter:  JorisBenschop        |                    Owner:  nobody
         Type:  Bug                  |                   Status:  new
    Component:  Database layer       |                  Version:  1.10
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by JorisBenschop:

Old description:

> Hi
>
> After upgrading Oracle from 11.2 to 12.1, {{manage.py inspectdb}} returns
> errors
> {{{
> # Unable to inspect table 'test_table'
> # The error was: unorderable types: NoneType() > int()
> }}}
>
> My original install was 1.9, but upgrading to Django 1.10 gave the same
> error. Oddly, the error in 1.9 came with a complete stack trace, while
> the one in 1.10 only have the above error. Here's the stack from 1.9
> {{{
> from django.db import models
> DEBUG (0.004) QUERY = "SELECT TABLE_NAME, 't' FROM USER_TABLES UNION ALL
> SELECT VIEW_NAME, 'v' FROM USER_VIEWS" - PARAMS = (); args=None
>

> class AuthGroup(models.Model):
> DEBUG (14.986) QUERY = '\n    SELECT ta.column_name, tb.table_name,
> tb.column_name\n    FROM   user_constraints, USER_CONS_COLUMNS ca,
> USER_CONS_COLUMNS cb,\n           user_tab_cols ta, user_tab_cols tb\n
> WHERE  user_constraints.table_name = :arg0 AND\n           ta.table_name
> = user_constraints.table_name AND\n           ta.column_name =
> ca.column_name AND\n           ca.table_name = ta.table_name AND\n
> user_constraints.constraint_name = ca.constraint_name AND\n
> user_constraints.r_constraint_name = cb.constraint_name AND\n
> cb.table_name = tb.table_name AND\n           cb.column_name =
> tb.column_name AND\n           ca.position = cb.position' - PARAMS =
> ('AUTH_GROUP',); args=['AUTH_GROUP']
> DEBUG (8.362) QUERY = "\n    SELECT LOWER(uic1.column_name) AS
> column_name,\n           CASE user_constraints.constraint_type\n
> WHEN 'P' THEN 1 ELSE 0\n           END AS is_primary_key,\n
> CASE user_indexes.uniqueness\n               WHEN 'UNIQUE' THEN 1 ELSE
> 0\n           END AS is_unique\n    FROM   user_constraints,
> user_indexes, user_ind_columns uic1\n    WHERE
> user_constraints.constraint_type (+) = 'P'\n      AND
> user_constraints.index_name (+) = uic1.index_name\n      AND
> user_indexes.uniqueness (+) = 'UNIQUE'\n      AND
> user_indexes.index_name (+) = uic1.index_name\n      AND  uic1.table_name
> = UPPER(:arg0)\n      AND  uic1.column_position = 1\n      AND  NOT
> EXISTS (\n              SELECT 1\n              FROM   user_ind_columns
> uic2\n              WHERE  uic2.index_name = uic1.index_name\n
> AND  uic2.column_position = 2\n           )\n        " - PARAMS =
> ('auth_group',); args=['auth_group']
> Traceback (most recent call last):
>   File "./manage.py", line 16, in <module>
>     execute_from_command_line(sys.argv)
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/core/management/__init__.py", line 350, in
> execute_from_command_line
>     utility.execute()
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/core/management/__init__.py", line 342, in execute
>     self.fetch_command(subcommand).run_from_argv(self.argv)
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/core/management/base.py", line 348, in run_from_argv
>     self.execute(*args, **cmd_options)
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/core/management/base.py", line 399, in execute
>     output = self.handle(*args, **options)
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/core/management/commands/inspectdb.py", line 25, in
> handle
>     for line in self.handle_inspection(options):
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/core/management/commands/inspectdb.py", line 66, in
> handle_inspection
>     indexes = connection.introspection.get_indexes(cursor, table_name)
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/db/backends/oracle/introspection.py", line 144, in
> get_indexes
>     for row in cursor.fetchall():
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/db/utils.py", line 102, in inner
>     return func(*args, **kwargs)
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/db/backends/oracle/base.py", line 519, in fetchall
>     return tuple(_rowfactory(r, self.cursor) for r in
> self.cursor.fetchall())
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/db/backends/oracle/base.py", line 519, in <genexpr>
>     return tuple(_rowfactory(r, self.cursor) for r in
> self.cursor.fetchall())
>   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
> packages/django/db/backends/oracle/base.py", line 580, in _rowfactory
>     elif precision > 0:
> TypeError: unorderable types: NoneType() > int()
>
> }}}
> The default database only contains tables that django itself has made and
> that were not touched by any user directly.

New description:

 Hi

 After upgrading Oracle from 11.2 to 12.1 (which required updating
 cx_Oracle to 5.3 for some reason), {{manage.py inspectdb}} returns errors
 {{{
 # Unable to inspect table 'test_table'
 # The error was: unorderable types: NoneType() > int()
 }}}

 My original install was 1.9, but upgrading to Django 1.10 gave the same
 error. Oddly, the error in 1.9 came with a complete stack trace, while the
 one in 1.10 only have the above error. Here's the stack from 1.9
 {{{
 from django.db import models
 DEBUG (0.004) QUERY = "SELECT TABLE_NAME, 't' FROM USER_TABLES UNION ALL
 SELECT VIEW_NAME, 'v' FROM USER_VIEWS" - PARAMS = (); args=None


 class AuthGroup(models.Model):
 DEBUG (14.986) QUERY = '\n    SELECT ta.column_name, tb.table_name,
 tb.column_name\n    FROM   user_constraints, USER_CONS_COLUMNS ca,
 USER_CONS_COLUMNS cb,\n           user_tab_cols ta, user_tab_cols tb\n
 WHERE  user_constraints.table_name = :arg0 AND\n           ta.table_name =
 user_constraints.table_name AND\n           ta.column_name =
 ca.column_name AND\n           ca.table_name = ta.table_name AND\n
 user_constraints.constraint_name = ca.constraint_name AND\n
 user_constraints.r_constraint_name = cb.constraint_name AND\n
 cb.table_name = tb.table_name AND\n           cb.column_name =
 tb.column_name AND\n           ca.position = cb.position' - PARAMS =
 ('AUTH_GROUP',); args=['AUTH_GROUP']
 DEBUG (8.362) QUERY = "\n    SELECT LOWER(uic1.column_name) AS
 column_name,\n           CASE user_constraints.constraint_type\n
 WHEN 'P' THEN 1 ELSE 0\n           END AS is_primary_key,\n           CASE
 user_indexes.uniqueness\n               WHEN 'UNIQUE' THEN 1 ELSE 0\n
 END AS is_unique\n    FROM   user_constraints, user_indexes,
 user_ind_columns uic1\n    WHERE  user_constraints.constraint_type (+) =
 'P'\n      AND  user_constraints.index_name (+) = uic1.index_name\n
 AND  user_indexes.uniqueness (+) = 'UNIQUE'\n      AND
 user_indexes.index_name (+) = uic1.index_name\n      AND  uic1.table_name
 = UPPER(:arg0)\n      AND  uic1.column_position = 1\n      AND  NOT EXISTS
 (\n              SELECT 1\n              FROM   user_ind_columns uic2\n
 WHERE  uic2.index_name = uic1.index_name\n                AND
 uic2.column_position = 2\n           )\n        " - PARAMS =
 ('auth_group',); args=['auth_group']
 Traceback (most recent call last):
   File "./manage.py", line 16, in <module>
     execute_from_command_line(sys.argv)
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/core/management/__init__.py", line 350, in
 execute_from_command_line
     utility.execute()
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/core/management/__init__.py", line 342, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/core/management/base.py", line 348, in run_from_argv
     self.execute(*args, **cmd_options)
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/core/management/base.py", line 399, in execute
     output = self.handle(*args, **options)
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/core/management/commands/inspectdb.py", line 25, in handle
     for line in self.handle_inspection(options):
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/core/management/commands/inspectdb.py", line 66, in
 handle_inspection
     indexes = connection.introspection.get_indexes(cursor, table_name)
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/db/backends/oracle/introspection.py", line 144, in
 get_indexes
     for row in cursor.fetchall():
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/db/utils.py", line 102, in inner
     return func(*args, **kwargs)
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/db/backends/oracle/base.py", line 519, in fetchall
     return tuple(_rowfactory(r, self.cursor) for r in
 self.cursor.fetchall())
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/db/backends/oracle/base.py", line 519, in <genexpr>
     return tuple(_rowfactory(r, self.cursor) for r in
 self.cursor.fetchall())
   File "/tools/general/app/anaconda-python-3.4/lib/python3.4/site-
 packages/django/db/backends/oracle/base.py", line 580, in _rowfactory
     elif precision > 0:
 TypeError: unorderable types: NoneType() > int()

 }}}
 The default database only contains tables that django itself has made and
 that were not touched by any user directly.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/27977#comment:2>
Django <https://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 unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/071.4d945f5e13dbe2eaa31a299fda42f2c7%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to