即使它在 pyodbc.dataSources() 中列出,也找不到驱动程序
Posted
技术标签:
【中文标题】即使它在 pyodbc.dataSources() 中列出,也找不到驱动程序【英文标题】:Driver not found even though it's listed in pyodbc.dataSources() 【发布时间】:2017-01-11 12:42:38 【问题描述】:我尝试使用 pyodbc 访问 MS Access .mdb 数据库。我已经设置了 ODBC 驱动程序,驱动程序已经注册到我的 DSN 中,我可以在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;')
但是,我不断收到此错误:
Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
我已尝试解决此问题.. 但没有运气。我错过了什么吗?
【问题讨论】:
【参考方案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 位“平台”的
并且相关的驱动程序将不可用于在 64 位 Python 下运行的 pyodbc。
获取可用驱动程序列表的更可靠方法是使用
drivers = pyodbc.drivers()
print(drivers)
这应该只显示可用于您的特定“平台”(即 64 位或 32 位 Python)的驱动程序。
【讨论】:
是的,我的 python 和 pyodbc 是 64 位的……我已经更新了 sysWOW64 中的 ODBC 驱动程序……但问题还没有解决。最后,我将 python 和 pyodbc 都降级为 32 位。有没有办法设置 pyodbc-64 位来引用正确的驱动程序? @SaberAlex - 64 位 Python/pyodbc 只能与 64 位驱动程序一起使用。如果安装了 32 位 Office,则 Python 应用程序必须以 32 位运行才能使用 32 位 Access ODBC 驱动程序。 似乎我的 pyodbc-64 位一直在引用 32 位驱动程序 @SaberAlex - 当您在 64 位 Python 下运行脚本时,您的意思是pyodbc.drivers()
正在显示“Microsoft Access Driver ...”吗?以上是关于即使它在 pyodbc.dataSources() 中列出,也找不到驱动程序的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 配置错误,即使它在 AppDelegate.swift 中被调用