Ao usar sqlalchemy, você deve passar o mecanismo e não a conexão bruta:
engine = create_engine("mysql+mysqldb://...")
df.to_sql('demand_forecast_t', engine, if_exists='replace', index=False)
Escrevendo no MySQL sem sqlalchemy (assim, especificando
flavor='mysql'
) está obsoleto. Quando o problema é que você tem um quadro muito grande para escrever de uma só vez, você pode usar o
chunksize
palavra-chave (consulte a docstring
). Por exemplo:df.to_sql('demand_forecast_t', engine, if_exists='replace', chunksize=10000)