【问题标题】:"Optional feature not implemented" error with pyodbc query against Access database针对 Access 数据库的 pyodbc 查询出现“未实现可选功能”错误
【发布时间】:2019-06-10 18:01:12
【问题描述】:

对于任何可以提供帮助的人,提前感谢您。
我正在运行 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 Driver]可选功能未实现 (106) (SQLBindParameter)')

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

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 日。

【问题讨论】:

  • 不会用简单的字符串 concat 来构建查询吗?即existquery = "SELECT * FROM EconVars WHERE Year(ValueDate) = " + str(1999)
  • 这也只是停止代码并退出,没有错误消息
  • pyodbc.version 返回什么?
  • 您好,版本为 4.0.25
  • 我发现运行语句existquery = """SELECT * FROM EconVars WHERE ValueDate = #01/05/1999#""" 不会在cursor.execute(existquery) cursor.fetchall 上停止,但是游标包含不正确的-1 行。行计数是确定游标是否有记录的正确方法吗?

标签: python ms-access select pyodbc pypyodbc


【解决方案1】:

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

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

更新

此问题已在 pyodbc 4.0.27 中修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多