A PyODBC connection string can also be sent in pyodbc’s format directly, as specified in the PyODBC documentation, using the parameter odbc_connect.
When you read data into a dataframe using pandas.read_sql(), pandas expects the first argument to be a query to execute (in string format).
import pyodbc as pdb import pandas as pd from sqlalchemy import create_engine from sqlalchemy.engine import URL server = 'SQLSERVER' database = 'DB' username = 'UID' password = 'PWD' # Pass through exact Pyodbc string into sqlalchemy conn_string = 'DRIVER={SQL Server Native Client 11.0};SERVER=tcp:'+server+';DATABASE='+database+';UID='+username+';PWD='+ password conn_url = URL.create("mssql+pyodbc", query={"odbc_connect": conn_string}) # SQLAlchemy connectable conn = create_engine(conn_url).connect() cursor.execute('exec USR_SP product_id, \'\', \'\', \'en\'') sSql = 'exec USR_SP product_id, \'2022-02-01\', \'2022-05-01\'' # Query into dataframe df = pd.read_sql(sSql, conn) sExportFile = 'C:/Export/Export.xlsx' df.to_excel(sExportFile)