pyodbc 没有更新表
Posted
技术标签:
【中文标题】pyodbc 没有更新表【英文标题】:pyodbc is not updating table 【发布时间】:2016-06-22 13:37:46 【问题描述】:基本上我正在尝试更新 Table1 中的 Column1_mbgl 字段数据,所有这些数据都基于 MS Access 数据库。该脚本在没有任何错误的情况下执行,但是在检查表时没有发生更新。我尝试了代码中显示的两个选项,但均未成功。第二个选项是直接从 MS Access 查询生成的 SQL 代码。有人可以建议我在代码中缺少什么吗?
#import pypyodbc
import pyodbc
# MS ACCESS DB CONNECTION
pyodbc.lowercase = False
conn = pyodbc.connect(
r"Driver=Microsoft Access Driver (*.mdb, *.accdb);" +
r"Dbq=C:\temp\DB_access.accdb;")
# OPEN CURSOR AND EXECUTE SQL
cur = conn.cursor()
# Option 1 - no error and no update
cur.execute("UPDATE Table1 SET Column1_mbGL = Column2_mbGL-0.3 WHERE ((Column3_name='PZ01') AND (DateTime Between #6/14/2016 14:0:0# AND #6/16/2016 12:0:0#) AND (TYPE='LOG'))");
# Option 2 - no error and no update
#cur.execute("UPDATE Table1 SET Table1.Column1_mbGL = [Table1]![Column2_mbGL]-0.3 WHERE (((Table1.Column3_name)='PZ01') AND ((Table1.DateTime) Between #6/14/2016 14:0:0# And #6/16/2016 12:0:0#) AND ((Table1.TYPE)='LOG'))");
cur.close()
conn.close()
【问题讨论】:
您是否检查过您的数据库中是否有满足 where 条件的记录?此外,值得检查查询是否在 python 之外按预期更新。 是的,相同的查询在 MS Access 中运行并成功更新,因此存在这种情况的数据。 您在执行 UPDATE 查询后忘记conn.commit()
。
@GordThompson,你是救生员,非常感谢!
【参考方案1】:
您在执行 UPDATE 查询后忘记conn.commit()
。 Python database API 指定默认情况下在“自动提交”关闭的情况下打开连接,因此需要显式的 commit
。
【讨论】:
以上是关于pyodbc 没有更新表的主要内容,如果未能解决你的问题,请参考以下文章
在 64 位 PC 上找不到数据源名称的 pyodbc 错误或没有默认驱动程序