On Thu, 15 May 2014 07:02:08 +0300 Jani Tiainen <[email protected]> wrote:
> On Wed, 14 May 2014 07:54:58 -0700 (PDT) > "J. D." <[email protected]> wrote: > > > Can someone help me with cx_Oracle and Django?! :) > > > > I have Oracle DB 11.2 with many PLSQL-procedures in it that return cursor > > with various output. I want to work with them without django ORM and > > directly call them. > > > > First of all i ran my python code without django, with the cx_Oracle driver > > and everything works well. > > > > conn = cx_Oracle.connect('user', 'pass') > > ora_cur = conn.cursor() > > l_cur = ora_cur.var(cx_Oracle.CURSOR) > > l_query = ora_cur.callproc('user.VIEW.procedure_with_cursor', (None, None, > > None, None, l_cur,)) #None - "*in*" parameters and l_cur - *out * > > l_query[0].fetchall() > > > > > > but with the django and same code, i got the error: > > > > import cx_Oracle > > from django.db import connection > > > > ora_cur = connection.cursor() > > ora_cur.execute("SELECT * from v$version") #it works > > > > l_cur = ora_cur.var(cx_Oracle.CURSOR) #-> *Error: > > *Variable_TypeByPythonType(): > > unhandled data type > > l_query = ora_cur.callproc('user.VIEW.procedure_with_cursor', (None, None, > > None, None, l_cur,)) > > l_query[0].fetchall() > > > > > > Django Version: 1.6.4 Exception Type: NotSupportedError Exception Value: > > > > Variable_TypeByPythonType(): unhandled data type > > > > > > > > Python Version: 2.7.3cx_Oracle 5.1.2 > > > > You're seeing that error because cursor returned from Django connection is not > actually cx_Oracle cursor but a wrapper that has similar methods. That is > done to > overcome different binding variable types and to use %s (oracle uses :name > format) > > You should be able to get pure cx_Oracle cursor by calling: > > connection._cursor() Sorry, my bad. You can get pure cx_Oracle connection from: connection.connection >From there you can do: connection.cursor(). So to rewrite your example in "django" way: import cx_Oracle from django.db import connection ora_cur = connection.connection.cursor() # See double connection stuff ora_cur.execute("SELECT * from v$version") #it works l_cur = ora_cur.var(cx_Oracle.CURSOR) l_query = ora_cur.callproc('user.VIEW.procedure_with_cursor', (None, None, None, None, l_cur,)) l_query[0].fetchall() -- Jani Tiainen -- You received this message because you are subscribed to the Google Groups "Django users" 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]. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/20140515072320.5f65715c%40jns42-l.w2k.keypro.fi. For more options, visit https://groups.google.com/d/optout.

