python读取csv文件导入到MySQL
注意的是!!
我这里为了方便,使用的全部都是以字符串的格式进行储存的。
下次使用假如IP和数据库账号密码不同,则要变化conn_mysql()函数,数据源不同则变化filename,使用的数据源在当前文件夹。
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='192.168.23.200', #你的主机IP
port=3306, #主机端口,不能加双引号
user='root', #MySQL用户
password='root', #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(100)'.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()
cur=pysql.conn_mysql() #连接mysql数据库
db=pysql.create_db(cur) #创建数据库
filename='air_data.csv' #插入数据的文件
head=pysql.table_head(filename) #创建表需要的字段
pysql.create_table_head(db,head) #创建表
pysql.table_info(db,filename) #插入数据