PYODBC + PYINSTALLER:EXE 列出不同的驱动程序作为编译器 (PyCharm),32 位访问和 64 位 Python

PYODBC + PYINSTALLER: EXE listing different drivers as compiler (PyCharm), 32 bit Access and 64 bit Python

我有 32 位访问权限和 64 位访问权限 Python(在 x64 Windows 10 上)。

我成功地 运行 以下代码从我的 .accdb 数据库中获取 table (或查询)并在我的 Pycharm.

中获得了期望的结果
import pyodbc
import pandas
import os
import sys

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))

print(pyodbc.drivers())

try:
    currdir = os.path.abspath(__file__)
except NameError:  # We are the main py2exe script, not a module
    import sys
currdir = os.path.abspath(os.path.dirname(sys.argv[0]))
DBfile = os.path.join(currdir, 'UNION.accdb')
cnxn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' %DBfile)
sql = "Select * FROM topivot"
df = pandas.read_sql(sql,cnxn)

print(df)

输出列出了所有正确的驱动程序。

C:\Users\xxx\AppData\Local\Programs\Python\Python37-32\python.exe C:/Users/xxx/AppData/Local/Programs/Python/Python37-32/pyddb3.py
Excel Files [Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)]
MS Access Database [Microsoft Access Driver (*.mdb, *.accdb)]
UNION [Microsoft Access Driver (*.mdb)]
accdb [Microsoft Access Driver (*.mdb)]
dBASE Files [Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)]
['Driver da Microsoft para arquivos texto (*.txt; *.csv)', 'Driver do Microsoft Access (*.mdb)', 'Driver do Microsoft dBase (*.dbf)', 'Driver do Microsoft Excel(*.xls)', 'Driver do Microsoft Paradox (*.db )', 'Microsoft Access Driver (*.mdb)', 'Microsoft Access-Treiber (*.mdb)', 'Microsoft dBase Driver (*.dbf)', 'Microsoft dBase-Treiber (*.dbf)', 'Microsoft Excel Driver (*.xls)', 'Microsoft Excel-Treiber (*.xls)', 'Microsoft ODBC for Oracle', 'Microsoft Paradox Driver (*.db )', 'Microsoft Paradox-Treiber (*.db )', 'Microsoft Text Driver (*.txt; *.csv)', 'Microsoft Text-Treiber (*.txt; *.csv)', 'SQL Server', 'ODBC Driver 13 for SQL Server', 'SQL Server Native Client 11.0', 'Microsoft Access Driver (*.mdb, *.accdb)', 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)', 'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)', 'Microsoft Access Text Driver (*.txt, *.csv)']

然而,当我通过 Auto-Py-to-Exe(或 Pyinstaller,通过避免最大递归错误并从 .spec 文件创建 EXE)运行 它时,我收到以下错误:

'SQL Server', 'ODBC Driver 13 for SQL Server', 'PostgreSQL ANSI(x64)',
'PostgreSQL Unicode(x64)', 'Amazon Redshift (x64 I', 'SQL Server Native
 Client 11.0', 'SQL Server Native Client RDA 11.0'] raceback (most recent
 call last): File "pyddb2.py", line 14, in <module> .yodbc.InterfaceError:
 ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not 
 found and no default dri er specified (0) (SQLDriverConnect)') 21444] Failed
 to execute script pyddb2 

这似乎列出了 Windows ODBC 64 驱动程序。为了防止这种情况,我尝试使用

中的 ODBC 数据源(32 位)还原 ODBC 数据源(64 位)的目标路径

%windir%\system32\odbcad32.exe

%windir%\syswow64\odbcad32.exe

但无济于事。

我怎么成功地 运行 32 位访问和 64 位 Python 上的 PY 文件,但是如何创建可以连接的 EXE。有什么想法吗?

找不到连接正确驱动程序的方法,所以我重新安装了 Access Engine、Python 和 Conda。安装 Python 32 位、Access Engine 2016 32 位以使其与 Access 32 位匹配。安装了 Auto Py To Exe 并且它有效。 EXE 文件现在有 64MB。