【发布时间】:2021-06-12 18:22:10
【问题描述】:
我正在尝试使用 python 3.9.2(64bit) 和 pyodbc 4.0.30(64bit) 在 oracledb 11.2.0.4.0(64bit) 中执行许多 (~1000) MERGE INTO 语句。但是,所有语句都返回异常:
HY000:驱动程序未提供错误
我已经尝试了我能想到的一切来解决这个问题,但没有运气。我尝试将代码、编码/解码和 ODBC 驱动程序从 oracle home 12.1(64bit) 更改为 oracle home 19.1(64bit)。我也尝试使用 pyodbc 4.0.22,在这种情况下,错误刚刚变为:
这并不比第一个错误更有帮助。我假设的问题不可能是 MERGE INTO 语句本身,因为当我尝试直接在数据库 shell 中运行它们时,它会毫无问题地完成。
下面是我的代码。我想我还应该提到在执行之前从标准输入读取命令和参数,并且 oracledb 使用的是 utf8 字符集。
cmds = sys.stdin.readlines()
comms = json.loads(cmds[0])
conn = pyodbc.connect(connstring)
conn.setencoding(encoding="utf-8")
cursor = conn.cursor()
cursor.execute("""ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD"T"HH24:MI:SS.....'""")
for comm in comms:
params = [(None) if str(x)=='None' or str(x)=='NULL' else (x) for x in comm["params"]]
try:
cursor.execute(comm["sql"],params)
except Exception as e:
print(e)
conn.commit()
conn.close()
编辑:另一件值得一提的事情——这个问题是在 python2.7 到 3.9.2 更新之后开始的。不过,代码本身根本不需要在这个特定位置进行任何更改。
【问题讨论】:
标签: python oracle odbc pyodbc python-3.9