PYODBC接口错误- 找不到数据源名称

4
我试图使用pyodbc将Python连接到MS Access数据库,但每次都会出现以下错误:
pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

以下是我编写的将Python连接到MS Access的代码:

import pyodbc

conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\PILOT_DATA.accdb;')
cursor = conn.cursor()
cursor.execute('select * from p_inventor')

for row in cursor.fetchall():
    print (row)

根据错误信息,它无法找到数据源名称,所以我将“DRIVER”更改为“DSN”。

import pyodbc

conn = pyodbc.connect(r'DSN={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\PILOT_DATA.accdb;')
cursor = conn.cursor()
cursor.execute('select * from p_inventor')

for row in cursor.fetchall():
    print (row)

但这并没有帮助。我收到了以下错误:

pyodbc.Error: ('IM010', '[IM010] [Microsoft][ODBC Driver Manager] Data source name too long (0) (SQLDriverConnect)')

我尝试过的另一个解决方法是同时使用Python 32位和64位。

以下是版本详情:

  • Python 3.7.4 64位
  • pip 19.2.3
  • pyodbc-4.0.27
  • Office365 16

非常希望知道还有什么其他方法可以将Python连接到ACCESS数据库。 提前致谢!


你的Office 365是64位的吗? - PaichengWu
1
使用 pyodbc.drivers() 检查可用的驱动程序。 - Parfait
@PaichengWu,是的,它是64位的。 - Tawhidul Islam
4个回答

0

微软网站安装 Access 驱动器 对我有用。

在安装驱动程序之前,我也遇到了 InterfaceError 并运行。

 import pyodbc
 [x for x in pyodbc.drivers() if x.startswith("Microsoft Access Driver")]

返回了一个空列表[]

安装驱动程序(x64版本)后,它将出现在上面代码的列表中,并调用conn.cursor()不再产生错误:

import pyodbc
[x for x in pyodbc.drivers() if x.startswith("Microsoft Access Driver")]
Out[1]: ['Microsoft Access Driver (*.mdb, *.accdb)']

0

我通过安装Access数据库引擎解决了这个问题。为了做到这一点,我必须卸载Office365程序->安装Access数据库引擎->重新安装Office365。然后代码就可以完美运行了!


0
如果Office 365安装为“Click-to-Run”(C2R),则某些Office组件存储在对非Office应用程序不可见的“隔离环境”中。Access数据库引擎就是其中之一。
在这种情况下,使用来自外部(非Office)应用程序的Access数据库引擎的解决方案是按照Microsoft Docs文章中所述下载和安装Access数据库引擎可再发行包: 无法在Office Click-to-Run应用程序之外使用Access ODBC驱动程序或OLEDB提供程序

感谢提供的指南。我通过安装访问数据库引擎解决了这个问题。为了做到这一点,我必须先卸载 Office365 程序 -> 安装访问数据库引擎 -> 重新安装 Office365。然后代码就完美地运行了! - Tawhidul Islam

0
根据 pyodbc 文档,您需要设置ODBC,并可以像这样检查它(如@Parfait所说);
import pyodbc
[x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接