目录结构及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','[email protected]','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)