[Django] #27977: inspectdb errors after upgrade to Oracle 12.1

19 views
Skip to first unread message

Django

unread,
Mar 22, 2017, 3:19:45 AM3/22/17
to django-...@googlegroups.com
#27977: inspectdb errors after upgrade to Oracle 12.1
-------------------------------------+-------------------------------------
Reporter: | Owner: nobody
JorisBenschop |
Type: Bug | Status: new
Component: Database | Version: 1.10
layer (models, ORM) |
Severity: Normal | Keywords:
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
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.

--
Ticket URL: <https://code.djangoproject.com/ticket/27977>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Mar 22, 2017, 4:09:56 AM3/22/17
to django-...@googlegroups.com
#27977: inspectdb errors after upgrade to Oracle 12.1
-------------------------------------+-------------------------------------
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
-------------------------------------+-------------------------------------

Comment (by JorisBenschop):

{{{
SELECT LOWER(uic1.column_name) AS column_name,
CASE user_constraints.constraint_type


WHEN 'P' THEN 1 ELSE 0

END AS is_primary_key,
CASE user_indexes.uniqueness


WHEN 'UNIQUE' THEN 1 ELSE 0

END AS is_unique


FROM user_constraints, user_indexes, user_ind_columns uic1

WHERE user_constraints.constraint_type (+) = 'P'

AND user_constraints.index_name (+) = uic1.index_name

AND user_indexes.uniqueness (+) = 'UNIQUE'

AND user_indexes.index_name (+) = uic1.index_name

AND uic1.table_name = UPPER(:arg0)

AND uic1.column_position = 1
AND NOT EXISTS (
SELECT 1
FROM user_ind_columns uic2
WHERE uic2.index_name = uic1.index_name
AND uic2.column_position = 2
)
}}}
cursor.bindvars
[<cx_Oracle.STRING with value 'auth_group'>]

cursor.description
[('COLUMN_NAME', <class 'cx_Oracle.STRING'>, 4000, 12000, None, None, 1),
('IS_PRIMARY_KEY', <class 'cx_Oracle.NUMBER'>, 127, None, None, None, 1),
('IS_UNIQUE', <class 'cx_Oracle.NUMBER'>, 127, None, None, None, 1)]

then in backends/oracle/base/_rowfactory the second item is processed
('IS_PRIMARY_KEY', <class 'cx_Oracle.NUMBER'>, 127, None, None, None, 1)
{{{
precision, scale = desc[4:6]
...
elif precision > 0
}}}
But the cursor.description coming from Oracle say that precision and scale
are None, so we crash.

for completeness:
{{{
import cx_Oracle
cx_Oracle.__version__
'5.3'
}}}

hope this helps

--
Ticket URL: <https://code.djangoproject.com/ticket/27977#comment:1>

Django

unread,
Mar 22, 2017, 4:38:51 AM3/22/17
to django-...@googlegroups.com
#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:

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

--

--
Ticket URL: <https://code.djangoproject.com/ticket/27977#comment:2>

Django

unread,
Mar 22, 2017, 4:40:26 AM3/22/17
to django-...@googlegroups.com
#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
-------------------------------------+-------------------------------------

Comment (by JorisBenschop):

downgrading to cx_Oracle 5.2 solves the issue. So this may be a problem in
cx_Oracle instead?

--
Ticket URL: <https://code.djangoproject.com/ticket/27977#comment:3>

Django

unread,
Mar 22, 2017, 4:45:01 AM3/22/17
to django-...@googlegroups.com
#27977: inspectdb errors after upgrade to cx_Oracle 5.3
-------------------------------------+-------------------------------------
Reporter: JorisBenschop | Owner: nobody
Type: Bug | Status: closed

Component: Database layer | Version: 1.10
(models, ORM) |
Severity: Normal | Resolution: wontfix
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by felixxm):

* status: new => closed
* resolution: => wontfix


Comment:

Django 1.10 doesn't support cx_Oracle 5.3 and higher (see #27924). Please
use cx_Oracle 5.2.1 instead.

--
Ticket URL: <https://code.djangoproject.com/ticket/27977#comment:4>

Django

unread,
Mar 22, 2017, 4:55:27 AM3/22/17
to django-...@googlegroups.com
#27977: inspectdb errors after upgrade to cx_Oracle 5.3
-------------------------------------+-------------------------------------
Reporter: JorisBenschop | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 1.10
(models, ORM) |
Severity: Normal | Resolution: wontfix
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by JorisBenschop):

Replying to [comment:4 felixxm]:


> Django 1.10 doesn't support cx_Oracle 5.3 and higher (see #27924).
Please use cx_Oracle 5.2.1 instead.

Apologies for submitting this duplicate ticket, and my gratitude for
pointing me to this

--
Ticket URL: <https://code.djangoproject.com/ticket/27977#comment:5>

Reply all
Reply to author
Forward
0 new messages