PYODBC + PYINSTALLER: EXE, в котором перечислены различные драйверы, такие как компилятор (PyCharm), 32-битный доступ и 64-битный Python - PullRequest
2 голосов
/ 03 мая 2019

У меня 32-битный доступ и 64-битный Python (в 64-разрядной версии 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, избегая макс. Ошибки рекурсии и создавая EXE из файла .spec), я получаю следующую ошибку:

'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 (64-разрядный) с источниками данных ODBC (32-разрядный) из

% WINDIR% \ system32 \ odbcad32.exe

до

% Windir% \ syswow64 \ odbcad32.exe

но безрезультатно.

Почему мне удалось успешно запустить PY-файл на 32-битном Access и 64-битном Python, но как создать EXE-файл, который будет подключаться. Есть идеи?

1 Ответ

2 голосов
/ 03 мая 2019

Не удалось найти способ подключения нужных драйверов, поэтому я переустановил Access Engine, Python и Conda. Установленный 32-битный Python, Access Engine 2016 32-битный, чтобы соответствовать ему с 32-битным Access. Установил Auto Py To Exe и все заработало. EXE-файл теперь имеет 64 МБ.

...