MichaelMMeskhi
MichaelMMeskhi

Reputation: 689

PyInstaller not including sqlalchemy-access module

I am trying to write a Dataframe back into a Access database file .mdb or .accdb. I am using sqlalchemy and sqlalchemy-access to create a connection.

import sqlalchemy

db_file_path = os.path.join(dir_path, f"data\\{graph_name}\\results\\{file_name}")
connection_string = (r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};' f"DBQ={db_file_path};" r'ExtendedAnsiSQL=1;')
connection_url = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}"
engine = sqlalchemy.create_engine(connection_url)
text_labels.to_sql('InstTextLabels', engine, index=False, if_exists='append')

I have pyodbc and sqlalchemy-access installed via pip. If I were to run this in Python interactive shell or Jupyter Notebook, it all works. But when I build a one file executable with PyInstaller I get:

File "solver.py", line 499, in main
export_results(file_name, graph_name, downstream_low, downstream_high, objective_results, objective_fuses, objective_recloseres, nodes, text_labels, dir_path)
File "solver.py", line 399, in export_results
engine = sqlalchemy.create_engine(connection_url)
File "sqlalchemy\engine\__init__.py", line 500, in create_engine
File "sqlalchemy\engine\strategies.py", line 61, in create
File "sqlalchemy\engine\url.py", line 172, in _get_entrypoint
File "sqlalchemy\util\langhelpers.py", line 267, in load
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:access.pyodbc
[5880] Failed to execute script solver

I don't know why this keeps happening. My script only imports sqlalchemy but I also included hiddenimports=['sqlalchemy_access', 'pyodbc'] in the .spec file. Yet, nothing helps.

Upvotes: 1

Views: 2199

Answers (1)

faysal
faysal

Reputation: 11

Add these import along with sqlalchemy:

import sqlalchemy_access as sa_a
import sqlalchemy_access.pyodbc as sa_a_pyodbc

Upvotes: 1

Related Questions