为什么cx_oracle的execute()现在不喜欢我的字符串?
我之前下载了cx_Oracle,并写了一个脚本来把数据转换成XML。后来我重装了操作系统,下载了最新版本的cx_Oracle(5.0.3),结果我的代码突然就坏了。
首先,cx_Oracle.connect现在需要用unicode格式的用户名和密码,而不是普通字符串,这个问题很容易解决。但现在在cursor.execute的时候,它总是提示我的字符串不是字符串,尽管type()显示它确实是字符串。
这是我很久以前用的一个测试脚本,在旧版本上运行得很好,但现在在cx_Oracle上却不行了。
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()
当我运行这个脚本时,出现了以下错误:
追踪信息(最近的调用在最前面): 文件 "C:\NetBeansProjects\Python\src\db_temp.py",第48行,在 cursor.execute(sql) 类型错误:期望是None或字符串
有没有人知道我可能哪里出错了?
2 个回答
1
也许调整一下你的编码设置会有帮助。
在我的情况下,我是这样设置的:
-- 编码: iso-8859-1 --
而你可能是:
-- 编码 : utf-8 --
4
我看到他们现在支持Python 3了。可能是他们需要一个unicode
对象,而不是str
字符串。他们在错误信息中使用了Python 3的术语,尽管在与用户名和密码相关的错误信息中,他们可能没有这样做。