我有一个需求:
1、导入新数据前trunk清空mysql中A表的数据;
2、导入A表新数据。
2个操作要么一起成功,要么一起失败,是不是应当用事务来做?怎么写?请教,谢谢!
import mysql.connector
try:
conn = mysql.connector.connect(host='localhost',
database='数据库名字',
user='用户',
password='密码')
conn.autocommit = False
cursor = conn.cursor()
# 清空A表数据
sql_update_query = """TRUNCATE TABLE A;"""
cursor.execute(sql_update_query)
# 导入数据
sql_update_query = """insert into table_name values();"""
cursor.execute(sql_update_query)
print("success")
# 提交
conn.commit()
except mysql.connector.Error as error:
print("fail, rollback: {}".format(error))
# 如果失败则回滚
conn.rollback()
finally:
# 关闭数据库连接
if conn.is_connected():
cursor.close()
conn.close()
print("connection is closed")
私信发了一个工具类给你,注意接收
非常感谢您的解答,明白了很多。但就我的实际应用来看,还有需要解惑的地方。
我导入了2个模块(如下),第一个是pymysql.Connect,可以自由利用sql增删改mysql,包括truncate清空就用这个;
第二个是sqlalchemy 模块,为了dataframe中的大量数据一次性导入数据库(用pymysql是不是只能一条一条写,sql非常长)
这2个模块如何联控形成事务?谢谢!
import pymysql
from sqlalchemy import create_engine
db=pymysql.Connect(host='127.0.0.1',user='root',passwd='123456',db='myfinance')#数据库连接
cursor_mysql=db.cursor()#数据库游标设置
engine=create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/myfinance') #连接本机的mysql数据库