本文已参与「新人创作礼」活动,一起开启掘金创作之路。
先看一下数据格式
下面不多说,直接上代码,代码中关于关键部分都已经注释,所以没有什么特别的记录,权当记个笔记。
#!/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)