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