繁体   English   中英

pyodbc MERGE INTO 错误:HY000:驱动程序未提供错误

[英]pyodbc MERGE INTO error: HY000: The driver did not supply an error

我正在尝试使用 python 3.9.2(64bit) 和 pyodbc 4.0.30(64bit) 在 oracledb 11.2.0.4.0(64bit) 中执行许多 (~1000) MERGE INTO 语句。 但是,所有语句都返回异常:

HY000:驱动程序未提供错误

我已经尝试了我能想到的一切来解决这个问题,但没有运气。 我尝试将代码、编码/解码和 ODBC 驱动程序从 oracle 家庭 12.1(64 位)更改为 oracle 家庭 19.1。 我也尝试使用 pyodbc 4.0.22 在这种情况下,错误刚刚变为:

<class 'pyodbc.ProgrammingError'> 返回带有错误集的结果

这并不比第一个错误更有帮助。 我假设的问题不能是 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 更新之后开始。 不过,代码本身根本不需要在这个特定位置进行任何更改。

我过去曾遇到过 HY000 错误。 它几乎总是归结为 SQL 查询中的语法错误。 仔细检查所有双引号和单引号,并确保查询在 SQL session 中独立运行到您的数据库时有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM