views:

250

answers:

2

I've downloaded cx_oracle some time ago and wrote a script to convert data to XML. I've had to reisntall my OS and grabbed the latest version of cx_Oracle (5.0.3) and all of the sudden my code is broken.

The first thing was that cx_Oracle.connect wanted unicode rather string for the username and password, that was very easy to fix. But now it keeps failing on the cursor.execute and tells me my string is not a string even when type() tells me it is a string.

Here is a test script I initally used ages ago and worked fine on my old version but does not work on cx_Oracle now.

    import cx_Oracle

ip = 'url.to.oracle'
port = 1521
SID = 'mysid'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)

connection = cx_Oracle.connect(u'name', u'pass', dsn_tns)
cursor = connection.cursor()
cursor.arraysize = 50

sql = "select isbn, title_code from core_isbn where rownum<=20"
print type(sql)
cursor.execute(sql)

for isbn, title_code in cursor.fetchall():
    print "Values from DB:", isbn, title_code

cursor.close()
connection.close()

When I run that I get:

Traceback (most recent call last): File "C:\NetBeansProjects\Python\src\db_temp.py", line 48, in cursor.execute(sql) TypeError: expecting None or a string

Does anyone know what I may be doing wrong?

+2  A: 

I see they support python 3 now. It could be that they want a unicode object instead of str, and they're using python 3 terminology in that error message, even though they presumably didn't in the error messages relating to user/pass.

Haukur Hreinsson
A: 

Hmm, I can't vote your answer up but it was correct, thank you for that Haukur!