gpt4 book ai didi

python - pyodbc 未提交对 db2 数据库的更改

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:18 24 4
gpt4 key购买 nike

我正在尝试使用 python 中的 pyodbc 更新我的 db2 数据库。 sql语句直接在数据库上运行正常,没有错误。当我运行下面的代码时,我没有收到任何错误并且代码执行成功,但是当我查询数据库时,更改没有保存。

try:
conn2 = pyodbc.connect("DRIVER={iSeries Access ODBC Driver};SYSTEM="+ Config_Main.iseriesServer +";DATABASE="+ Config_Main.iseriesDB +";UID="+ Config_Main.iseriesUser +";PWD=" + Config_Main.iseriesPass)
db2 = conn2.cursor()

for row in encludeData:
count = len(str(row[2]))
srvid = row[2]
if count < 10:
sql3 = "UPDATE SVCEN2DEV.SRVMAST SET svbrch = ? WHERE svtype != '*DCS-' AND svacct = ? AND svcid LIKE '%?' and svbrch = ?"
db2.execute(sql3, (row[4],row[1],"%" + str(srvid),row[5]))
else:
sql3 = "UPDATE SVCEN2DEV.SRVMAST SET svbrch = ? WHERE svtype != '*DCS-' AND svacct = ? AND svcid = ? and svbrch = ?"
db2.execute(sql3, (row[4],row[1],srvid,row[5]))
conn2.commit()
except pyodbc.Error as e:
logging.error(e)

我试过设置 conn2.autocommit = True。并且我还尝试在 for 循环内移动 conn2.commit() 以在每次迭代后提交。我还尝试了不同的驱动程序 {IBM i Access ODBC Driver}

编辑:

encludeData 示例

['4567890001','4567890001','1234567890','1234567890','foo','bar']

在更改 except 语句以获取一般错误后,上面的代码现在会产生此错误:

IntegrityError('23000', '[23000] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0803 - Duplicate key value specified. (-803) (SQLExecDirectW)')

最佳答案

正如 OP 所发现的那样,应用层语言 Python 可能不会引发特定的数据库异常,例如重复索引或外键问题,因此会静默失败或在服务器端记录。通常影响实际 SQL 查询运行的错误如不正确的标识符和语法错误会在客户端引发错误。

因此,作为编程中的最佳实践,有必要使用异常处理,如 Python 的 try/except/finally 或其他通用语言中的等效项,这些语言与任何外部 API(如数据库连接)按顺序进行交互捕捉并正确处理运行时问题。

下面将打印任何try block 中引发的语句异常,包括连接和查询执行。并且无论成功或失败都会运行 finally 语句。

try:
conn2 = pyodbc.connect(...)
db2 = conn2.cursor()

sql = "..."
db2.execute(sql, params)
conn2.commit()

except Exception as e:
print(e)

finally:
db2.close()
conn2.close()

关于python - pyodbc 未提交对 db2 数据库的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47310244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com