无法使 pyodbc-4.0 64 位找到 excel 驱动程序(windows10-64 位)
fail to make pyodbc-4.0 64bit find excel driver (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:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.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:\WinPython\basedir36\buildZero\winpython-32bit-3.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:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.xls;READONLY=FALSE
>>>
it works if I use pyodbc4- 32 bit and python-3.6 32 bit... so how to make it work in 64 bit ?
如果脚本 运行 在 64 位 Python 下,则需要安装 64 位版本的 Excel ODBC 驱动程序。
There is an old office 2007 32 bit on this pc
可以 "forced install" 64 位 Access 数据库引擎(包括 Access 和 Excel ODBC 驱动程序)与 32 位版本的 Office 一起使用,但那是不推荐,因为在某些情况下它会破坏 Office 安装。 (它被称为 "forced install" 因为 Access 数据库引擎安装程序的默认行为是防止它发生。)
如果 "old office 2007" 不再被使用,那么您可以将其卸载,然后安装 64 位版本的 Access 数据库引擎。如果 仍在使用,那么您可能应该坚持使用 运行 32 位 Python 脚本。
我不知道如何在 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:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.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:\WinPython\basedir36\buildZero\winpython-32bit-3.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:\WinPython\basedir36\buildZero\winpython-64bit-3.6.x.1\notebooks\test.xls;READONLY=FALSE
>>>
it works if I use pyodbc4- 32 bit and python-3.6 32 bit... so how to make it work in 64 bit ?
如果脚本 运行 在 64 位 Python 下,则需要安装 64 位版本的 Excel ODBC 驱动程序。
There is an old office 2007 32 bit on this pc
可以 "forced install" 64 位 Access 数据库引擎(包括 Access 和 Excel ODBC 驱动程序)与 32 位版本的 Office 一起使用,但那是不推荐,因为在某些情况下它会破坏 Office 安装。 (它被称为 "forced install" 因为 Access 数据库引擎安装程序的默认行为是防止它发生。)
如果 "old office 2007" 不再被使用,那么您可以将其卸载,然后安装 64 位版本的 Access 数据库引擎。如果 仍在使用,那么您可能应该坚持使用 运行 32 位 Python 脚本。