【发布时间】:2010-10-24 01:44:28
【问题描述】:
我通过 Microsoft Jet 使用 pyodbc 从 Python 程序访问 Microsoft Access 2003 数据库中的数据。
Microsoft Access 数据库来自第三方;我只是在读取数据。
我在提取所需数据方面通常都取得了成功,但我最近注意到了一些差异。
我把它归结为一个简单的查询,形式如下:
SELECT field1 FROM table WHERE field1 = 601 AND field2 = 9067
我已经混淆了字段名称和值,但实际上,没有比这更简单的了!当我在 Access 中运行查询时,它返回一条记录。
然后我通过 pyodbc 运行它,代码如下所示:
connection = pyodbc.connect(connectionString)
rows = connection.execute(queryString).fetchall()
(同样,没有比这更简单的了!)
queryString 的值是从 Access 中的工作查询中剪切和粘贴的,但它返回 no 记录。我希望它会返回相同的记录。
当我更改查询以搜索 field2 的不同值时,宾果游戏可以正常工作。它拒绝的只是一些值。
所以,请帮帮我。我接下来应该在哪里寻找来解释这种差异?如果我不能相信琐碎查询的结果,我就没有机会参与这个项目!
更新:它变得更简单了!以下查询给出了不同的数字...
从表中选择 COUNT(*)
我想这是否与某些形式的缓存和/或另一个偶尔填充数据的应用程序的不正确事务管理有关。
【问题讨论】:
-
你应该有一个游标对象来执行查询字符串吗?然后将在游标上调用 Fetchall 以生成行。见code.google.com/p/pyodbc/wiki/Rows
-
@barrowc,很有趣。我没有注意到缺少 cursor() 调用。我确定我从某处的示例中复制了这个。我尝试将其添加回 [ rows = connection.cursor().execute(queryString).fetchall() ] 但没有任何区别 - 显然 pyodbc 比 Python DB API 规范更宽容。
标签: python ms-access odbc jet pyodbc