根据id修改数据库的某一列(for 循环执行语句大批量修改是不行的)
1、连接数据库(用root权限,权限不够创建表等操作会出问题)
2、sql语句
①创建临时表(关键字Temporary,处理完自动删除的表)
②批量插入临时表,ID是int类型也用%s(用到了pymysql的excutemany)
dataframe转化成特殊list类型
③根据ID修改操作的字段,我这里是nlp_name_semantics_v3
3、pymysql执行sql语句
#本地测试数据库
conn = pymysql.connect(host='127.0.0.3', port=3306, user='root', passwd='123456789', db='test',charset='utf8')
# 使用cursor()方法获取操作游标
cur = conn.cursor()
#sql语句 主键 操作字段
sql_update1 = "create TEMPORARY table tmp(id int(11) PRIMARY KEY ,nlp_name_semantics_v3 varchar(255))"
sql_update2 = "insert into 临时表 values (%s, %s);"
#这个格式很重要,dataframe是不能当此处参数格式的
param = data[['id','nlp_name_semantics_v3']].values.tolist()
sql_update3 = "update 修改表 as x, 临时表 as t \
set x.nlp_name_semantics_v3=t.nlp_name_semantics_v3 \
where x.id=t.id;"
#操作数据库
try:
cur.execute(sql_update1) #向sql语句传递参数
cur.executemany(sql_update2,param)
cur.execute(sql_update3)
conn.commit()
except Exception as e:
#错误回滚
conn.rollback()
print('发生错误,已经回滚')
finally:
conn.close()