使pyodbc-4.0 64位查找excel驱动程序(windows10-64bit)失败



我不知道如何在windows 10 64位(python-3.6)上使用pyodbc4连接到我的excel文件。有人知道我在这段代码中的错误吗?

import pyodbc
import os
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))
# DATABASE CONNECTION
filename = 'C:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.xls'
assert os.path.exists(filename)
# was wrong: CNXNSTRING = 'Driver={Microsoft Excel Driver (*.xls)};DBQ=%s;READONLY=FALSE' % filename
CNXNSTRING = 'Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=%s;READONLY=FALSE' % filename
print ('CNXNSTRING is ', CNXNSTRING)
cnxn = pyodbc.connect(CNXNSTRING, autocommit=True)

64位结果:

>>> 
RESTART: C:/WinPython/basedir36/buildZero/winpython-64bit3.6.x.1/notebooks/TEST6.py 
Excel Files [Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)]
MS Access Database [Microsoft Access Driver (*.mdb, *.accdb)]
dBASE Files [Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)]
CNXNSTRING is  Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:WinPythonbasedir36buildZerowinpython-64bit-3.6.x.1notebookstest.xls;READONLY=FALSE
Traceback (most recent call last): File "C:/WinPython/basedir36/buildZero/winpython-64bit-3.6.x.1/notebooks/TEST6.py", line 17, in <module>
cnxn = pyodbc.connect(CNXNSTRING, autocommit=True)
pyodbc.Error: ('IM002', '[IM002] [Microsoft][Gestionnaire de pilotes ODBC]     Source de donn�es introuvable et nom de pilote non sp�cifi� (0) (SQLDriverConnect)')
>>> 

新发现:如果我使用pyodbc4-32位和python-3.6 32位,它会起作用。。。那么如何使它在64位中工作呢?

32位结果:

>>> 
RESTART: C:WinPythonbasedir36buildZerowinpython-32bit-3.6.x.1notebooksTEST6.py 
Excel Files [Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)]
MS Access Database [Microsoft Access Driver (*.mdb, *.accdb)]
dBASE Files [Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)]
CNXNSTRING is  Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:WinPythonbasedir36buildZerowinpython-64bit-3.6.x.1notebookstest.xls;READONLY=FALSE
>>>

如果我使用pyodbc4-32位和python-3.6-32位,它就可以工作。。。那么如何使它在64位中工作呢?

如果脚本在64位Python下运行,则需要安装64位版本的Excel ODBC驱动程序。

这台电脑上有一个旧的office 2007 32位

可以在32位版本的Office中"强制安装"64位Access数据库引擎(包括Access和Excel ODBC驱动程序),但不建议这样做,因为在某些情况下,它可能会破坏Office的安装。(它被称为"强制安装",因为Access数据库引擎安装程序的默认行为是防止这种情况发生。)

如果不再使用"旧的office 2007",则可以卸载它,然后安装64位版本的Access数据库引擎。如果仍在使用,那么您可能应该坚持以32位运行Python脚本。

最新更新