This
connection = engine.connect() df.to_sql(con=connection, name='TBL_NAME', schema='SCHEMA', index=False, if_exists='replace') works with oracle DB in specific schema wothout errors, but will not work if you have limited permissions. And note that table names is case sensative.