python-3.x - PYODBC + PYINSTALLER:EXE 列出不同的驱动程序作为编译器 (PyCharm)、32 位 Access 和 64 位 Python
问题描述
我有 32 位访问和 64 位 Python(在 x64 Windows 10 上)。
我成功运行以下代码从我的 .accdb 数据库中获取表(或查询)并在我的 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 位)从
%windir%\system32\odbcad32.exe
至
%windir%\syswow64\odbcad32.exe
但无济于事。
为什么我设法在 32 位 Access 和 64 位 Python 上成功运行 PY 文件,但是如何创建可以连接的 EXE。有任何想法吗?
解决方案
找不到连接正确驱动程序的方法,所以我重新安装了 Access Engine、Python 和 Conda。安装 Python 32bit、Access Engine 2016 32bit 以匹配 Access 32bit。安装 Auto Py To Exe 并且它工作。EXE 文件现在有 64MB。
推荐阅读
- azure - Azure 静态网站托管优于 Azure CDN 有什么好处
- angularjs - Highcharts 图表不随 Firebase 更新
- jenkins - 关于管道中的 Jenkins if else 语句
- amazon-web-services - 无法使用 CLI 和组织授予的帐户创建具有网络负载均衡器的 ElasticBeanstalk 应用程序
- python - 提取的文本以单行形式出现
- llvm - 如何在 LLVM IR 指令中迭代运算符
- c# - 如何在不使用凭据的情况下检查 Web 服务是否可用
- python-3.x - 使用 PyMongo 从复杂的 MongoDB 数据库中提取数据并将其转换为 .csv 文件
- typescript - 如何在 ngrx 效果中使用先前 http 调用的有效负载
- appium - 我应该在 APPIUM 测试中使用什么推荐的混合版本?