python操作mysql——批量添加csv数据

目录结构及db_config.ini参考上一篇:python操作MySQL数据------连接与插入数据-CSDN博客

1、mysql_db.py

python 复制代码
import pymysql.cursors
from pymysql.err import OperationalError
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"

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()

    

2、redCsv.py

python 复制代码
import csv
import codecs
import os
from itertools import islice
from db_fixture.mysql_db import DB
dirPath = os.path.dirname(os.path.dirname(__file__))
dirPath = dirPath.replace('\\','/')
event_Path = dirPath + '/data/event_data.csv'
guest_Path = dirPath + '/data/guest_data.csv'

class Csv_oper:
    def read_header(self):
        '''
        功能:字符串形式组合表头(字段)并返回
        :return:表头,格式形如: id,name,`limit`,status,address,start_time
        '''
        data_csv = csv.reader(codecs.open(self.filePath, 'r', 'gbk'))
        data = []
        for line in islice(data_csv,0,1):
            data.append(line)
        header = ','.join(data[0])
        return header

    def read_data(self):
        '''
        功能:每行数据以string形式组合,最后返回到列表中
        :return: ["'1','张三','17712341234','XX1@email.com','1','1'", "'2','张无忌','17712341235',......]
        '''
        data_csv = csv.reader(codecs.open(self.filePath,'r','gbk'))
        data = []
        for line in islice(data_csv,1,None):
            data.append(line)
        result = []
        for item in data:
            # print(i) # ['1', '小米1', '1000', '1', '某某会展中心101', '2023/8/20 14:20']
            for i in range(0,int(len(item))):
                item[i] = "'" + str(item[i]) + "'"
            s = ','.join(item)
            result.append(s)
        return result
# ["'1','小米1','1000','1','某某会展中心101','2023/08/20 14:20'", "'2','小米2','1001','1','某某会展中心102','2023/08/21 14:20'"]

    # # 批量插入csv文件的数据
    def init_data(self,table_name,filePath):
        '''
        :param table_name: 数据表名
        :param key: 字段名
        :param data: 字段值
        :return: 无
        '''
        self.filePath = filePath
        key = self.read_header()    # 字段名称
        data = self.read_data()     # 字段值
        db = DB()
        db.clear(table_name)
        for value in data:
            real_sql = "INSERT INTO " + table_name + "(" + key + ") VALUES (" + value + ") ;"
            db.execute(real_sql)
        db.conn.commit()

if __name__ == '__main__':
    table_name1 = 'sign_event'
    table_name2 = 'sign_guest'
    csv_oper = Csv_oper()
    csv_oper.init_data(table_name1,event_Path)
    csv_oper.init_data(table_name2,guest_Path)
相关推荐
2301_809204701 天前
bootstrap怎么实现鼠标悬停切换图片预览功能
jvm·数据库·python
坚果派·白晓明1 天前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
小徐学编程-zZ1 天前
量产测试数据
python·压力测试·数据库架构
花间相见1 天前
【PaddleOCR教程01】PP-OCRv5 全面指南:从模型架构到实战部署
开发语言·r语言
QQ8057806511 天前
django基于机器学习的电商评论情感分析系统设计实现
python·机器学习·django
wx09091 天前
stata实现机器学习的环境配置
python·机器学习·stata
小短腿的代码世界1 天前
Qt 股票订单撮合引擎:高频交易系统的核心心脏
开发语言·数据库·qt·系统架构·交互
nuowenyadelunwen1 天前
CS 61A Lab 2 笔记:短路求值、高阶函数与 Lambda 表达式
python·函数式编程·cs61a·berkeley
谙弆悕博士1 天前
快速学C语言——第16章:预处理
c语言·开发语言·chrome·笔记·创业创新·预处理·业界资讯
2501_921939261 天前
MHA高可用
数据库·mysql