1

我不知道如何在 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
>>>
4

1 回答 1

1

如果我使用 pyodbc4- 32 位和 python-3.6 32 位,它可以工作......那么如何让它在 64 位下工作?

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

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

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

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

于 2017-01-07T19:04:13.567 回答