用python将csv文件导入MySQL数据库中重要用到了python中的pyMySQL模块
一、pyMySQL
- 作用
作为mysql客户端操作数据
2.链接语法
连接对象 = pymysql.connect(
host='连接地址 localhost , ip 地址',
port=端口号,默认3306,
user='用户名',
password='密码',
database='数据库名',
charset='utf8' )
3.操作流程
a.导入pymysql
b.使用pymysql的connect()方法连接数据,返回连接对象
c.使用连接对象创建游标对象(用于操作sql)
d.准备写sql语句(eg:select * from student)
e.使用游标对象执行sql(发送)(没有查询数据返回受影响的行数)
f.有查询数据使用游标获取
g.关闭游标(先)和数据库连接(后)
二、具体代码
import pymysql
file_path = "exam.csv" # 需要导入的csv文件
table_name = 'update_time_table' # 目标数据库
try:
con = pymysql.connect(user="root",
passwd="password",
db="数据库名称",
host="127.0.0.1",
local_infile=1)
con.set_charset('utf8')
cur = con.cursor()
cur.execute("set names utf8")
cur.execute("SET character_set_connection=utf8;")
with open(file_path, 'r', encoding='utf8') as f:
reader = f.readline()
print(reader)
devide = reader.split(',') # 做成列表
devide[-1] = devide[-1].rstrip('\n') # 去除最后的换行符
print(devide)
column = ''
for dd in devide:
#如果标题过长,只能存成text格式
if dd == "标题":
column = column + dd + ' TEXT,'
else:
column = column + dd + ' varchar(255),'
col = column.rstrip(',') # 去除最后一个多余的,
# print(column[:-1])
create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'.format(table_name, col)
print(create_table_sql)
data = 'LOAD DATA LOCAL INFILE \'' + file_path + '\'REPLACE INTO TABLE ' + table_name + ' CHARACTER SET UTF8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'
cur.execute(create_table_sql)
cur.execute(data.encode('utf8'))
print(cur.rowcount)
con.commit()
except:
print("发生错误")
con.rollback()
finally:
cur.close()
con.close()
注:数据库链接信息需自己配置