python - 针对 Access 数据库的 pyodbc 查询出现 "Optional feature not implemented"错误

标签 python ms-access select pyodbc pypyodbc

对于任何可以提供帮助的人,先谢谢您。
我正在运行 64 位 Windows 10、64 位 Office 和 64 位 python 3.7.2

使用 pyodbc,我尝试执行如下所示的 Select 语句:

"SELECT * FROM EconVars WHERE Year(ValueDate) = 1999"

为了做到这一点,我的代码如下:

existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""        
params = (1999,)
cursor.execute(existquery,params)

当我运行此程序时,出现以下错误 pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access 驱动程序]可选功能未实现 (106) (SQLBindParameter)')

我读过这可能是因为 pyodbc 在传递整数值时遇到问题,因此我尝试转换为 float ,因为这似乎对某些人有用。因此,我的代码变成:

existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = (float(1999),)
cursor.execute(existquery,params)

运行此代码时,程序只是停止在cursor.execute 行,没有错误。

我还尝试使用 pypyodbc 模块来代替,并在运行上面完全相同的代码时

existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = [1999,]
cursor.execute(existquery,params)

我收到以下错误

OSError: exception: access violation reading 0x0000000000000000

我已经确认游标连接没有任何问题,因为同一个游标成功运行了 INSERT 命令。

如果有人有任何想法,我们将不胜感激。

更新 1

感谢您的回复,我已经降级到4.0.24,但是错误仍然存​​在,下面的代码仍然会崩溃,没有错误

existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = (1999,)
cursor.execute(existquery,params)
existData = cursor.fetchall()

此外,传递字符串也不起作用

existquery = """SELECT * FROM EconVars WHERE Year(ValueDate) = ?"""
params = ('1999',)
cursor.execute(existquery,params)
existData = cursor.fetchall()

我已经通过传递字符串日期(例如

)来使其工作
existquery = """SELECT * FROM EconVars WHERE ValueDate = ?"""
params = ('#01/04/1999#',)
cursor.execute(existquery,params)
existData = cursor.fetchall()

但是,显然这在查找特定年份的数据点时没有帮助。它还会导致英国/美国日期问题,因为上面的日期实际上被解释为 1 月 4 日。

最佳答案

我能够重现您的问题。当 pyodbc 4.0.25 中引入的一项更改似乎会导致针对 Access 数据库的查询出现问题(当这些查询使用整数参数时)。

该问题已在 GitHub 上报告 here 。同时,降级到 pyodbc 4.0.24。

更新

此问题已在 pyodbc 4.0.27 中修复。

关于python - 针对 Access 数据库的 pyodbc 查询出现 "Optional feature not implemented"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56970924/

相关文章:

python - 如何将对象加载到内存中以供整个 django 项目查看?

python - 在 Pandas 中根据多个条件过滤 DataFrame

c# - 无需物理安装驱动程序即可使用 OLEDB 连接

ms-access - Access VBA 格式

angularjs - AngularFire 和 ngOptions

python - 将随机数量的随机数写入文件并返回它们的平方

c++ - 检测是否安装了 Microsoft Access 驱动程序

mysql - 使用 Join 表获取总和

php - 如何在 PHP 中检索和显示 COUNT 查询结果?

python - 在条形图中使用 yerr 以及将数据透视表与 Pandas 一起使用时出现 ValueError