python将CSV数据写入到Mysql数据库中

348 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

先看一下数据格式

image.png

下面不多说,直接上代码,代码中关于关键部分都已经注释,所以没有什么特别的记录,权当记个笔记。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''=================================================
@Project -> File   :untitled4 -> writeDateBase
@IDE    :PyCharm
@Author :XF
@Date   :2022/4/22 17:06
@Desc   :
=================================================='''
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import csv
import pymysql
import codecs
import time

'''
python读取csv文件到mysql上
'''

class PyMysql:
    def __init__(self):
        self.db = input('请输入你想创建的数据库名称: ')
        self.table = input('请输入你想创建的表名称: ')

    # 连接数据库
    def conn_mysql(self):
        conn = pymysql.connect(
            host='127.0.0.1',  # 你的主机IP
            port=3306,  # 主机端口,不能加双引号
            user='root',  # MySQL用户
            password='123456',  # MySQL密码
            charset='utf8'  # 使用的编码格式,不能使用utf-8 ,不能加多一个横杠
        )
        return conn

    # 创建数据库
    def create_db(self, cur):
        # 创建游标
        db = cur.cursor()
        # 创建数据库
        db.execute("create database if not exists {} character set utf8;".format(self.db))
        # 切换至改数据库
        db.execute("use {};".format(self.db))
        # 事务更新
        cur.commit()
        print('创建数据库成功')
        return cur

    # 创建表
    def create_table_head(self, db, head):
        sql = 'create table if not exists {}('.format(self.table)  # 创建表
        for i in range(0, len(head)):
            sql += '{} varchar(300)'.format(head[i])
            if i != len(head) - 1:
                sql += ','
            sql += '\n'
        sql += ');'
        cur = db.cursor()
        cur.execute(sql)
        db.commit()
        time.sleep(0.1)
        print('创建表完成')

    # 插入数据
    def insert_table_info(self, db, info):
        sql = 'insert into {} values ('.format(self.table)
        for i in range(0, len(info)):
            sql += '"{}" '.format(info[i])
            if i != len(info) - 1:
                sql += ','
        sql += ');'
        try:
            cur = db.cursor()
            cur.execute(sql)
            db.commit()
            time.sleep(0.1)
            print('插入数据成功')
        except Exception as e:
            print('插入数据失败,失败原因', e)

    # 创建表所需要的字段
    def table_head(self, filename):
        with codecs.open(filename=filename, mode='r', encoding='utf-8') as f:
            reader = csv.reader(f)
            head = next(reader)
            return head

    # 表需要的数据
    def table_info(self, db, filename):
        with codecs.open(filename=filename, mode='r', encoding='utf-8') as f:
            data = csv.reader(f)
            for index, rows in enumerate(data):
                if index != 0:  # 不要首行
                    row = rows
                    self.insert_table_info(db, row)


if __name__ == '__main__':
    # 实例化对象
    pysql = PyMysql()
    # 连接mysql数据库
    cur = pysql.conn_mysql()
    # 创建数据库
    db = pysql.create_db(cur)
    # 插入数据的文件
    filename = 'pinglun1.csv'
    # 创建表需要的字段
    head = pysql.table_head(filename)
    # 创建表
    pysql.create_table_head(db, head)
    # 插入数据
    pysql.table_info(db, filename)