python-mysql:根据json形成公用方法之update篇-02

本文介绍了如何改进Python中用于MySQL更新的公共方法,重点关注主键判断和基于主键的数据计数,以实现更精确的更新操作。文章包括主键判断、数据计数方法的创建,以及更新语句的构造和执行效果展示。

先前写过一个形成公用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、执行效果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值