Python SQLalchemy在捕获异常时回滚?

Python SQLalchemy在捕获异常时回滚?,python,python-3.x,postgresql,sqlalchemy,Python,Python 3.x,Postgresql,Sqlalchemy,我有一个类似于以下的功能: def data_to_sql(response: pd.DataFrame, table, engine, if_exists="append"): try: response.to_sql(table, con=engine, index=False, if_exists) except: sqlalchemy.exc.DBAPIError as e: data = pd.read_s

我有一个类似于以下的功能:

def data_to_sql(response: pd.DataFrame, table, engine, if_exists="append"):

    try:
       response.to_sql(table, con=engine, index=False, if_exists)
    except:
       sqlalchemy.exc.DBAPIError as e:
       data = pd.read_sql(f"SELECT * FROM {table}", con=engine)
       new_response = pd.concat([data, response])
       new_response.to_sql(table, con=engine, index=False,
                           if_exists="replace")
当存在未定义的列时,会发生此异常;当响应(DataFrame)中有一列不在数据库中要附加到的表中时

现在,我在另一个函数中调用此函数:

def another_function(response, table, engine, if_exists="append"):
    # extract data from response here which gives us 3
    # different responses which we want to append to different tables

    with engine.begin() as con:
      data_to_sql(response1, table=table+"1", engine=con, if_exists=if_exists)

      data_to_sql(response2, table=table+"2", engine=con, if_exists=if_exists)  

      data_to_sql(response3, table=table+"3", engine=con, if_exists=if_exists) 
现在,
engine.begin()
可以确保,每当其中发生错误时,更改都会回滚到以前的状态

现在,这不是我所期望的。
response2
是导致
data\u to\u sql()
函数异常的原因,每当我处理此异常(
sqlalchemy.exc.DBAPIError
)时,
table2
用新数据更新(通过处理异常),但是
table1
not
table3
都不是,我得到一个错误:
sqlalchemy.exc.InvalidRequestError:此事务处于非活动状态

这似乎与回滚范围有关,或者在提交之前终止会话,或者类似的事情有关,但我无法理解