Python mysql批量更新数据(兼容动态数据库字段、表名)
liuian 2025-08-03 06:02 32 浏览
一、应用场景
上篇文章我们学会了在pymysql事务中批量插入数据的复用代码,既然有了批量插入,那批量更新和批量删除的操作也少不了。
二、解决思路
为了解决批量删除和批量更新的问题,提出如下思路:
- 所有更新语句的生成都共用一个入口
- 更新的数据库字段和参数可动态决定
- 要操作的表名可动态决定
- 返回where条件前的sql语句
三、解决办法
- 这里只演示批量更新的解决办法,批量删除的类似。
- 跟插入语句不同的是,更新语句的where条件前set的数据才可以进行动态生成sql语句,而where条件后面的需要另外拼接。
- 例如:
update user_info set name ='头条号_code_space',size='30cm' where id=1 其中where条件前的sql就是我们要进行动态sql拼接的,通用方法此时只返回where条件前的sql语句。
def common_update_sql(item, table):
"""
从item的key-value提取要更新的字段,进行更新
:param item: 要执行更新的字段的字典,{"colunm_name_1":"colunm_value_1","colunm_name_2":"colunm_value_2"}
:param table: 数据库表名
:return: 返回拼接好的where条件前的sql更新语句
"""
update = ','.join([" {key} = %s".format(key=key) for key in item])
update_sql = 'update {table} set '.format(table=table) + update
return update_sql四、测试demo
# -*- coding: utf-8 -*-
"""
@Time : 2022/1/29 12:50
@Auth : 技术空间
@File :handle_list_sql_demo2.py
@IDE :PyCharm
@Motto:技术总是要日积月累的
"""
import pymysql
def common_update_sql(item, table):
"""
从item的key-value提取要更新的字段,进行更新
:param item: 要执行更新的字段的字典,{"colunm_name_1":"colunm_value_1","colunm_name_2":"colunm_value_2"}
:param table: 数据库表名
:return: 返回拼接好的where条件前的sql更新语句
"""
update = ','.join([" {key} = %s".format(key=key) for key in item])
update_sql = 'update {table} set '.format(table=table) + update
return update_sql
def select_list(db_cursor, sql):
"""
查询数据量表的列表
:param db_cursor: 游标
:param sql: 拼接好的sql查询语句
:return: 返回查询结果列表
"""
db_cursor.execute(sql)
data_list = db_cursor.fetchall()
print(data_list)
return data_list
if __name__ == '__main__':
db = pymysql.connect(host='localhost',
user='root',
password='root',
database='others')
cursor = db.cursor(pymysql.cursors.DictCursor)
table_1 = "user_info"
table_2 = "user_role"
select_user_sql = " select id,name from " + table_1
select_role_sql = " select user_id,role_id from " + table_2
try:
print("执行批量更新user前的数据-->")
select_list(cursor, select_user_sql)
update_user_list = []
for i in range(4, 7):
update_user_list.append({"name": "头条号_code_space_" + str(i)})
# 更新user表的id为4,5,6的数据
for i in range(3):
update = update_user_list[i]
update_sql = common_update_sql(update, table_1)
update_sql = update_sql + " where id=" + str(i + 4)
cursor.execute(update_sql, tuple(update.values()))
# 开始批量插入表2
print("执行批量更新user_role前的数据-->")
select_list(cursor, select_role_sql)
update_role_list = []
for i in range(4, 7):
update_role_list.append({"user_id": i, "role_id": 2})
# 更新user_role表的id为4,5,6的数据
for i in range(3):
update = update_role_list[i]
update_sql = common_update_sql(update, table_2)
update_sql = update_sql + " where id=" + str(i + 4)
cursor.execute(update_sql, tuple(update.values()))
except Exception as e:
# 事务回滚
db.rollback()
print('事务处理失败', e)
else:
# 事务提交
db.commit()
print('事务处理成功', cursor.rowcount)
print("执行批量更新user后的数据-->")
select_list(cursor, select_user_sql)
print("执行批量更新user_role后的数据-->")
select_list(cursor, select_role_sql)
cursor.close()
db.close()
关注我,坚持每日积累一个技巧,长期坚持,我们将会不断进步。
相关推荐
- psp模拟器ios(psp模拟器ios推荐)
-
psp手机模拟器推荐PPSSPP,作为最流行的开源PSP模拟器,因为其强大的功能和兼容性广受玩家们喜爱。虽然提供了PC和安卓双平台的支持,但是有碍于安卓设备的硬件,移动端PPSSPP的功能并不完整。不...
- 台式机重装系统按f几(重装电脑系统按f几)
-
F8、F9、F10、F11、F12、F2、del。一般用到这几个。下面以联想电脑装WIN10系统为例:1、将制作好的U盘插入要重装系统的电脑,开机画面出现电脑品牌logo时,不停地按“f2键”进入“B...
- win10激活错误代码0x8007007b
-
Win10激活出现0x8007007b解决方法如下1、找到计算机,右键点击属性,确认你的电脑系统是否是windows10。2、鼠标右击桌面,依次点击个性化-主题-桌面图标设置,勾选计算机后依次点击应用...
-
- 4000台式电脑最好的组装配置
-
四千元价格组装电脑主机与五千元组装电脑主机的价格类似,因为电脑主机就几个大部件,电脑主机主板是多少代的产品?主板内存的插槽数?电脑处理器等如果是自己组装,都可以配置到十二代产品,电脑硬盘可以分为256G固态硬盘做系统盘,1T机械硬盘作为工作...
-
2025-11-06 20:05 liuian
- linux是一种什么系统(linux属于什么系统)
-
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。其内核由林纳斯·本纳第克特·托瓦兹于1991年1...
- 手机管理大师免费版(手机管理大师极速版)
-
使用手机“文件管理”打开文件夹时提示访问受限,需要前往“文件”应用查看1.进入手机设置——安全——应用权限——权限/应用2.在手机桌面找到手机管家——权限隐私——应用权限——权限/应用?当然,相对于被...
- 电脑能开机但是进不去桌面怎么办
-
打开任务管理器按Ctrl+Shift+Esc打开任务管理器。文件中运行新任务点击文件,运行新任务。输入指令重启桌面输入explorer.exe,点击确定,等待桌面重启完成就可以了。电脑已经是我们生活中...
- 怎样解除自动关机模式(怎样解除自动开关机)
-
1、打开手机主界面,找到系统自带的“时钟”应用,点击打开它。2、点击进入时钟后,点击右下角的“计时器”。3、进入到计时器后,点击“在计时结束启用雷达”这个选项。4、然后在这里,下拉到最下面,勾选“停...
- 电脑最高配置是什么配置2025
-
一,2023最新主流电脑装机配置如下。二,处理器可以使用十二代的i512400或者i512490f,内存16gb双通道,显卡rtx3060,主板可以使用b660m或者h610m。三,如果十三代酷睿...
- MySQL慢查询优化:从explain到索引,DBA手把手教你提升10倍性能
-
数据库性能是应用系统的生命线,而慢查询就像隐藏在系统中的定时炸弹。某电商平台曾因一条未优化的SQL导致订单系统响应时间从200ms飙升至8秒,最终引发用户投诉和订单流失。今天我们就来系统学习MySQL...
- 一文读懂SQL五大操作类别(DDL/DML/DQL/DCL/TCL)的基础语法
-
在SQL中,DDL、DML、DQL、DCL、TCL是按操作类型划分的五大核心语言类别,缩写及简介如下:DDL(DataDefinitionLanguage,数据定义语言):用于定义和管理数据库结构...
- 闲来无事,学学Mysql增、删,改,查
-
Mysql增、删,改,查1“增”——添加数据1.1为表中所有字段添加数据1.1.1INSERT语句中指定所有字段名语法:INSERTINTO表名(字段名1,字段名2,…)VALUES(值1...
- 数据库:MySQL 高性能优化规范建议
-
数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,...
- 下载工具合集_下载工具手机版
-
迅雷,在国内的下载地位还是很难撼动的,所需要用到的地方还挺多。缺点就是不开会员,软件会限速。EagleGet,全能下载管理器,支持HTTP(S)FTPMMSRTSP协议,也可以使用浏览器扩展检测...
- mediamtx v1.15.2 更新详解:功能优化与问题修复
-
mediamtxv1.15.2已于2025年10月14日发布,本次更新在功能、性能优化以及问题修复方面带来了多项改进,同时也更新了部分依赖库并提升了安全性。以下为本次更新的详细内容:...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
