【发布时间】: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