sqlalchemy实现python操作数据库时,若cursor.execute(sql)用sql语句清空数据后使用 df_upload.to_sql(upload_name, engine, if_exists="append", index=False)追加数据,实现中途出错即rollback
时间: 2024-02-27 13:58:46 浏览: 90
基于SQLAlchemy实现操作MySQL并执行原生sql语句
5星 · 资源好评率100%
在使用`sqlalchemy`操作数据库时,可以使用上下文管理器`with`来实现自动提交或回滚事务。在这种情况下,如果在清空数据之后执行`df_upload.to_sql()`方法时出现错误,则会自动回滚并撤销对数据库的更改。
下面是一个示例代码:
```
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.exc import IntegrityError
engine = create_engine('mysql+pymysql://username:password@host:port/dbname')
Session = sessionmaker(bind=engine)
# 创建数据库会话
with Session() as session:
# 开始事务
with session.begin():
try:
# 清空数据
session.execute('TRUNCATE TABLE table_name')
# 追加数据
df_upload.to_sql(upload_name, engine, if_exists="append", index=False)
except IntegrityError as e:
# 出现错误时回滚事务
session.rollback()
print(f"Error: {str(e)}")
except Exception as e:
# 其他异常时也回滚事务
session.rollback()
print(f"Error: {str(e)}")
else:
# 没有出现错误时提交事务
session.commit()
print("Data uploaded successfully.")
```
在上面的代码中,我们首先创建了一个`Session`对象,并将其绑定到数据库引擎上。然后使用`with`语句创建了一个数据库会话。在这个会话中,我们使用`with session.begin()`语句开始了一个事务。在事务中,我们首先清空了数据表,然后使用`df_upload.to_sql()`方法追加数据。如果出现了`IntegrityError`异常(比如插入了重复的数据),则会回滚事务并输出错误信息。如果没有出现异常,则会提交事务并输出成功信息。
阅读全文