PYODBC在一台机器上SQL查询静默失败,另一台却正常

1 投票
1 回答
1333 浏览
提问于 2025-04-15 17:56

我正在开发一个程序,用来自动解析XML文件中的数据,并把这些数据存储到几个数据库里。(具体来说,是美国地质调查局的实时水质服务,如果有人感兴趣,可以查看这个链接:http://waterservices.usgs.gov/rest/WaterML-Interim-REST-Service.html)这个程序是用Python 2.5.1写的,使用了LXML和PYODBC。数据库是Microsoft Access 2000。

连接数据库的函数如下:
def get_AccessConnection(db):
connString = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + db
cnxn = pyodbc.connect(connString, autocommit=False)
cursor = cnxn.cursor()
return cnxn, cursor
这里的db是数据库的文件路径。

这个程序的工作流程是:
a) 打开数据库的连接
b) 解析2到8个XML文件,并把里面的值整理成一系列记录,准备插入到数据库中(使用嵌套字典结构,而不是用户定义的类型)
c) 遍历这些记录,对每一条记录执行一个SQL查询
d) 提交并关闭数据库连接

如果在执行cursor.execute()时出现错误,它会把错误信息和查询记录到日志文件里,然后继续执行。

当我的同事在他的电脑上运行这个程序时,对于某个特定的数据库,某些记录就是不见了,而且没有记录任何错误。而我在我的电脑上用完全相同的代码和数据库,经过同样的网络路径运行时,所有应该有的数据都在。

我和我的同事都是用Windows XP的电脑,安装了Microsoft Access 2000,以及相同版本的Python、lxml和pyodbc。我不知道怎么检查我们是否使用了相同版本的Microsoft ODBC驱动程序。我也没有发现存在的记录和缺失的记录之间有什么不同。我正在测试其他数据库是否也会出现同样的问题,以及第三个同事的电脑上是否也会出现。

我真的很想知道有没有什么可能导致这个问题,因为这让我很困惑。总结一下:在一台电脑上执行的Python代码会悄无声息地让一半的SQL查询失败,而在另一台电脑上却能完美运行。

编辑:
问题解决了。我刚让我的同事再运行一次,这次数据库更新得很完整,没有缺失的记录。仍然不知道最开始为什么会失败,也不知道以后是否还会出现这种情况,但“问题解决了”。

1 个回答

1

我不知道怎么检查我们是否有相同版本的微软ODBC驱动程序。

我觉得你可以去控制面板 | 管理工具 | 数据源(ODBC)那里看看。然后点击“驱动程序”标签。

我记得Access 2000或者Office 2000里有一个叫“MSDE”的桌面版SQL Server。安装这个来测试一下可能会有帮助。(如果是生产环境也可以考虑安装。)

撰写回答