python操作MySQL——封装增删改查

上一篇:python操作MySQL数据------连接与插入数据-CSDN博客

下一篇:python操作mysql------批量添加csv数据-CSDN博客

python 复制代码
import pymysql.cursors
from pymysql.err import OperationalError
from  data.readCsv import Csv_to_lst
import os
import configparser as cparser

base_dir = str(os.path.dirname(os.path.dirname(__file__)))
base_dir = base_dir.replace('\\','/')
file_path = base_dir + "/db_config.ini"
event_Path = base_dir + '/data/event_data.csv'
guest_Path = base_dir + '/data/guest_data.csv'

cf = cparser.ConfigParser()
cf.read(file_path)

host = cf.get("mysqlconf","host")
port = cf.get("mysqlconf","port")
user = cf.get("mysqlconf","user")
password = cf.get("mysqlconf","password")
db = cf.get("mysqlconf","db_name")

class DB:

    def __init__(self):
        try:
            self.conn = pymysql.connect(
                host=host,
                user=user,
                password=password,
                port=int(port),
                db=db,
                charset='utf8mb4',
                cursorclass=pymysql.cursors.DictCursor
            )
            self.cursor = self.conn.cursor()
        except pymysql.err.OperationalError as e:
            print("Mysql Error %d : %s"%(e.args[0],e.args[1]))

    def execute(self,sql):
        print(sql)
        self.cursor.execute(sql)
        rowcount = self.cursor.rowcount
        return rowcount

    def clear(self,table_name):
        real_sql1 = "SET FOREIGN_KEY_CHECKS=0;"
        real_sql2 = "TRUNCATE "+ table_name +";"
        self.execute(real_sql1)
        self.execute(real_sql2)
        self.conn.commit()

    def insert(self,table_name,table_data): # table_data是字典格式的数据
        for key in table_data:
            table_data[key] = "'"+str(table_data[key])+"'"
        key = ','.join(table_data.keys())
        value = ','.join(table_data.values())
        real_sql = "INSERT INTO " + table_name + "(" +key + ") VALUES (" + value + ") ;"
        self.execute(real_sql)
        self.conn.commit()

    def delete(self,table_name,data):
        global temp
        for k,v in data.items():
            i = int(len(v))
            if i!=0:
                if i==1:
                    temp = k +" = " + "'"+str(v[0])+"'"
                elif i>1:
                    s=str(v).replace('[','(').replace(']',')')
                    temp = k +" in " + s
        real_sql = "DELETE FROM " +table_name+ " WHERE "+temp
        self.execute(real_sql)
        self.conn.commit()

    def update(self,table_name,data,condition):
        # data = {'name': '小米14发布会2', 'address': '某某会议中心','start_time': '2023-08-20 00:25:42'}
        # update('my_table', data, condition="id in (1,2)")
        global real_sql
        set_lst = []
        for k, v in data.items():
            temp = k + "=" + "'" + str(v) + "'"
            set_lst.append(temp)
        set = ','.join(set_lst)
        if (table_name != '')and(set != ''):
            if condition != '':
                real_sql = "UPDATE " + table_name + " SET " + set + " WHERE " + condition+ " ; "
            elif condition == '':
                real_sql = "UPDATE " + table_name + " SET " + set + " ; "
            self.execute(real_sql)
            self.conn.commit()

    def select(self,table_name,field,condition,top):
        global data
        real_sql = "SELECT " + field + " FROM " + table_name + " WHERE " + condition +  ";"
        self.execute(real_sql)
        if top == 1:
            data = self.cursor.fetchone()
        elif 1<top:
            data = self.cursor.fetchmany(top)
        elif top<1:
            data = self.cursor.fetchall()
        return data

    def close(self):
        self.conn.close()

    # 批量插入csv文件的数据
    def init_data(self,table_name,file_path):
        self.clear(table_name)
        obj = Csv_to_lst(file_path)
        data = obj.read_data()
        key = obj.read_header()
        for value in data:
            real_sql = "INSERT INTO " + table_name + "(" + key + ") VALUES (" + value + ") ;"
            self.execute(real_sql)
        self.conn.commit()

if __name__ == '__main__':
    table_name = "sign_event"
    table_name2 = "sign_guest"
    db = DB()
    # 导入csv表格的数据
    # db.clear(table_name)
    # db.clear(table_name2)
    # db.init_data(table_name,event_Path)
    # db.init_data(table_name2,guest_Path)

    # 插入数据
    # data = {'name': '小米14发布会2', '`limit`': 1000, 'status': 1, 'address': '某某会议中心',
    #         'start_time': '2023-08-20 00:25:42'}
    # data2 = {'realname': '张三2', 'phone': 12312341217, 'email': 'XX1@mail.com', 'sign': 0, 'event_id': 8}
    # db.insert(table_name,data)
    # db.insert(table_name2,data2)

    # 更新数据
    # set_event = {'name': '小米14发布会', 'address': '某某会议中心','start_time': '2023-08-22 00:25:42'}
    # db.update(table_name,set_event,condition="id in (1,2)")
    # set_guest = {'sign':1}
    # db.update(table_name2,set_guest,condition='event_id=1 and sign=0')

    # 删除数据
    # del_data={'id':[7,8]}
    # db.delete(table_name,del_data)
    # db.delete(table_name2,del_data)

    # 查询数据
    select_data = db.select(table_name2,'*',"sign='0'",3)
    print(select_data)

上一篇:python操作MySQL数据------连接与插入数据-CSDN博客

下一篇:python操作mysql------批量添加csv数据-CSDN博客

相关推荐
程序新视界9 小时前
MySQL中什么是回表查询,如何避免和优化?
mysql
薛定谔的算法14 小时前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend15 小时前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术16 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Java水解17 小时前
【MySQL】从零开始学习MySQL:基础与安装指南
后端·mysql
Raymond运维20 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉21 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud1 天前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud2 天前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence2 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库