即使它在pyodbc.dataSources()中列出,也找不到驱动程序

时间:2017-01-11 12:42:39

标签: python-3.x ms-access odbc driver pyodbc

我尝试使用pyodbc访问MS Access .mdb数据库。我已经设置了ODBC驱动程序,驱动程序已经注册到我的DSN,我可以在$db = new mysqli($server, $username, $password, $database); 找到

pyodbc.dataSources()

结果:

​sources = pyodbc.dataSources()
dsns = list(sources.keys())
dsns.sort()
sl = []
for dsn in dsns:
    sl.append('%s [%s]' % (dsn, sources[dsn]))
print('\n'.join(sl))

因此,我尝试使用此命令访问数据库:

Excel Files [Microsoft Excel Driver (*.xls)]
MS Access DB [Microsoft Access Driver (*.mdb, *.accdb)]
MS Access Database [Microsoft Access Driver (*.mdb)]
dBASE Files [Microsoft dBase Driver (*.dbf)]

但是,我一直收到这个错误:

con = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=H:\access-panda\data\myDB.mdb;')

我试图解决这个问题..但没有运气。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

pyodbc.dataSources()生成的列表具有误导性,因为它显示了32位和64位“平台”的结果。在具有32位Office的计算机上,在64位Python下运行代码将生成列表

Excel Files [Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)]
MS Access Database [Microsoft Access Driver (*.mdb, *.accdb)]

但如果我们打开64位ODBC管理器,我们会发现它们都是32位“平台”

odbc64.png

并且相关的驱动程序将可用于在64位Python下运行的pyodbc。

获取可用驱动程序列表的更可靠方法是使用

drivers = pyodbc.drivers()
print(drivers)

这应该只显示特定“平台”可用的驱动程序(即64位或32位Python)。