对于任何可以提供帮助的人,先谢谢您。
我正在运行 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/