先前写过一个形成公用update的东西,感觉不够通用且针对实际业务场景考虑不周全,本次重新丰富代码内容。相较于以前本次update代码主要增加了对主键判断及根据主键进行过滤数据的count,达到更准确的更新效果。但是在数据库连接部分未进行封装。
1、创建主键判断方法:
# ============================================================== # -*- coding: utf-8 -*- # @Time : 2018/01/03 13:27 # ============================================================== import json import pymysql def fun_check_table(table_name): conn = pymysql.connect('localhost','root','Aa111111','db_jxc',charset='utf8') data = conn.cursor() sql = "DESC %s" % table_name data.execute(sql) data_table = data.fetchall() for i in data_table: if 'PRI' in i: return i[0]
2、创建count值的方法:
# ============================================================== # -*- coding: utf-8 -*- # ============================================================== import pymysql def fun_count(table_name,fid,id): conn = pymysql.connect('localhost','root','Aa111111','db_jxc',charset='utf8') data = conn.cursor() sql = "SELECT COUNT(*) FROM %s WHERE %s='%s'"%(table_name,fid,id) data.execute(sql) result = data.fetchone() return result[0]
3、 形成UPDATE:
# ============================================================== # -*- coding: utf-8 -*- # ============================================================== import json import pymysql # 形成UPDATE公共方法 from db_crud.fun_check_table import fun_check_table from db_crud.fun_count import fun_count def conn_mysql(): conn = pymysql.connect('localhost','root','Aa111111','db_jxc',charset='utf8') data = conn.cursor() table_name = input("请输入表名:\n") sql = "SELECT * FROM %s"% table_name data.execute(sql) data_table = data.fetchall() d = [] for i in data_table: b = {} b['id'] = i[0] b['name'] = i[1] b['age'] = i[2] d.append(b) jsonStr = json.dumps(d, ensure_ascii=False) list_json = json.loads(jsonStr) print(list_json) print('\r\n') fid = fun_check_table(table_name) print("主键为:%s"% fid) print('\r\n') sql = 'update '+ table_name + ' set \r\n' for i in list_json: sql_m = "" id = i.pop('%s' % fid) num = fun_count(table_name,fid,id) if num == 1: for j in i: sql_k = j+"='%s'," % i[j] sql_m += sql_k sql_x = sql + sql_m sql_x = sql_x[:-1] sql_x += "\r\n where %s='%s'" % (fid,id) print(sql_x.upper()) else: print("查询到多条!核对之后再来删除!") data.close() conn.close() conn_mysql()
4、执行效果:
本文介绍了如何改进Python中用于MySQL更新的公共方法,重点关注主键判断和基于主键的数据计数,以实现更精确的更新操作。文章包括主键判断、数据计数方法的创建,以及更新语句的构造和执行效果展示。
739

被折叠的 条评论
为什么被折叠?



