我在使用pyodbc进行update操作时总是失败,没有报错

问题代码

import pyodbc
# 连接数据库
cnxn = pyodbc.connect(
    'DRIVER={SQL Server};SERVER=IP地址;DATABASE=数据库名;UID=用户名;PWD=密码')
# 获取游标
updateCursor = cnxn.cursor()
updateCursor.execute(
    "UPDATE JCXX SET JCXX.JCXM = NULL WHERE JCXX.ID =2010135042")
print(updateCursor.rowcount, 'products updated')
updateCursor.commit()
if not cnxn.autocommit:
    cnxn.commit()
# 关闭
updateCursor.close()
cnxn.close()

本地开发环境

操作系统: windows 10 64-bit 企业版 LTSC 2019
python: Python 3.6.6rc1 (v3.6.6rc1:1015e38be4, Jun 12 2018, 07:51:23) [MSC v.1900 32 bit (Intel)] on win32
pyodbc: 4.0.30

现象描述

在执行这个 update 操作时,无论是使用游标的 commit 方法,还是使用连接的 commit 方法,都无法改变数据库中的数据。 print(updateCursor.rowcount) 的值为 1,表示确实有一行被更新。

debug 过程

在查阅了 stack overflow、百度、bing 等的搜索结果后比较迷惑,所有的地方都是告诉我要么使用 conn.commit() ,要么使用 cursor.commit() ,但是我用了以后怎么尝试都无法更新表中的数据,希望遇到类似问题的朋友可以指点一下。

讨论数量: 2
Jason990420

看了一下, 好像都OK, 确定没更新吗?

Before

file

import pyodbc

driver = 'SQL SERVER'
server = '.'
database = 'mydb'
cnxn = pyodbc.connect(
    f'DRIVER={{{driver}}};SERVER={server};DATABASE={database}')
cursor = cnxn.cursor()
cursor.execute(
    "UPDATE Table_1 SET Table_1.JCXM = NULL WHERE Table_1.ID2 = 2010135041")
print(cursor.rowcount, 'products updated')
cnxn.commit()
cnxn.close()

After

file

3年前 评论

我在自己的环境下连接的是局域网内的一台服务器,不知道为什么 update 无法 commit ,后来换用 pymssql 后一切正常。和你这边环境不同的是那台服务器是 sql server2008,不知道有没有可能是兼容性的问题。
感谢解答!

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!