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.

Reply via email to