2010-01-12 35 views
1

我正在开发一个程序,用于自动解析XML文件中的数据并将其存储到多个数据库中。 (特别是USGS实时水质服务,如果有人感兴趣,请登录http://waterservices.usgs.gov/rest/WaterML-Interim-REST-Service.html)使用LXML和PYODBC在Python 2.5.1中编写。该数据库是在Microsoft Access 2000通过PYODBC的SQL查询在一台机器上无声无息地失败,在另一台机器上失败

连接功能如下:
DEF get_AccessConnection(分贝):
CONNSTRING = 'DRIVER = {Microsoft Access驱动程序(* .mdb)中}; DBQ =' +分贝
cnxn = pyodbc.connect(CONNSTRING,自动提交=假)
光标= cnxn.cursor()
返回cnxn,光标
其中db是文件路径到数据库。

程序:
一个)开口于数据库
b中的连接)解析为该数据库2至8的XML文件,并建立从它们的值成一系列的记录插入到数据库中(使用嵌套字典结构,而不是一个用户定义的类型)
c)中循环通过一系列记录,cursor.execute() - 荷兰国际集团为每一个
d SQL查询)款和关闭数据库连接

如果cursor.execute()调用会引发错误,它会将追溯和查询写入日志文件并继续前进。

当我的同事在他的机器上运行它时,对于一个特定的数据库,特定的记录根本就不存在,没有记录错误。当我在我的机器上完全相同的网络路径上完全相同的数据库副本上运行完全相同的代码时,应存在的所有数据都在那里。

我和我的同事都在装有Microsoft Access 2000的Windows XP计算机上,并安装了相同版本的Python,lxml和pyodbc。我不知道如何检查我们是否具有相同版本的Microsoft ODBC驱动程序。我一直无法找到那里的记录和没有的记录之间的区别。我正在测试与其他数据库是否发生同样的问题,以及它是否发生在第三个同事的计算机上。

我真的很想知道的是任何人都可以想到会导致这种情况,因为这对我没有意义。总结一下:执行SQL查询的Python代码将在一台计算机上默默无视一半,并在另一台计算机上完美工作。

编辑:
没有更多的问题。我刚刚让我的同事再次运行它,数据库完全更新,没有丢失记录。仍然不知道为什么它首先失败,也不知道它是否会再次发生,但“问题解决了”。

+0

没有'autocommit',它有什么区别吗? Access不是一个事务数据库,所以当然'autocommit = False'不能被承认。我用ODBC通过脚本与Access交谈的经历绝对糟糕(挂起等)。你可以尝试ADO,它至少不那么糟糕......当然理想的情况是Access需要消失。 – bobince 2010-01-12 17:08:43

+0

我不知道访问不是事务性的。这当然是表现如此 - 如果我在测试程序时没有调用cnxn.commit(),则不会更改数据库。 如果可能,我宁愿不改变自动提交。如果出现意外的和未处理的错误,我不想要半成品数据库。 – Rowan 2010-01-12 17:51:34

+0

@Rowan:这是预料之中,Access会等到做出任何事情,直到你让它提交 - 这样才能“尊重”交易。 :( - >访问 – Hogan 2010-01-12 22:27:47

回答

1

我不知道如何检查我们是否有 Microsoft ODBC驱动程序的相同版本。

我认为你正在寻找控制面板|管理工具|数据源(ODBC)。点击“驱动程序”选项卡。

我认为Access 2000或Office 2000附带一个名为“MSDE”的SQL Server桌面版。可能值得安装测试。 (或者生产,就此而言。)

相关问题