一、前言
相信码友们在优化sql时,都会遇到这样的问题,今天教你如何向 MySQL 数据库 批量更新数据;
废话不多说,直接看步骤实现 。。。
好文章 记得收藏+点赞+关注额 !!!---- Nick.Peng
二、封装执行SQL方法
import json
from pymysql import *
def exec_sql(db_name, sql):
"""
封装sql执行方法
:param db_name: 操作的数据库名字
:param sql: 要执行的sql语句
:return:
"""
conn = connect(host="127.0.0.1",
port=3306,
user="root",
password="root",
database=db_name)
conn.autocommit(1)
cs = conn.cursor()
count = cs.execute(sql)
conn.commit()
cs.close()
conn.close()
三、封装更新数据方法
def update_data(id_list):
"""
拼接SQL并更新数据到数据库
:param id_list: 需要更新数据的id列表
"""
# 准备更新到数据库的数据
data_list = [{"id": 1, "update_time": 1579167262}, {"id": 2, "update_time": 1589167262}]
sql = """UPDATE table_name SET update_time= CASE id"""
for obj in data_list:
id = obj.get('id')
update_time = int(obj.get('update_time', 0))
sql += f""" WHEN {id} THEN {update_time} """
ids = ','.join(map(str, id_list))
sql += f"END WHERE id IN ({ids})"
print("SQL语句:{}".format(sql))
app_db.exec_sql(db_name, sql) # 执行sql,使用exec_sql时将其放在同一文件内或导包
四、拼接后的SQL语句
# 调用更新数据方法 ======单笔数据情况
update_data([1])
# SQL语句如下
UPDATE table_name
SET update_time = CASE id
WHEN 1 THEN 1579167262
WHEN 2 THEN 1589167262
END
WHERE id IN (1);
# 调用更新数据方法 ======多笔数据情况
update_data([1, 2, 3, 4, 5])
# SQL语句如下
UPDATE table_name
SET update_time = CASE id
WHEN 1 THEN 1579167262
WHEN 2 THEN 1589167262
END
WHERE id IN (1, 2, 3, 4, 5)
完结。。。觉得有用,记得收藏
+ 点赞
+ 关注
额 !