前言:本来想先在excel中将数据写好后再通过mysql管理工具将excel数据导入到mysql中的,但是,无论我怎么努力,发现总有些数据导入不进去,弄了几次都没成功,不想在这个地方浪费时间了,于是有了这篇博客。
环境:python3.6.8,mysql5.7,openpyxl3.0.1,pymysql
第一步,打开excel文件:
首先导入相关模块,这里推荐使用openpyxl版本>=3.0,因为这个版本优化了很多问题,同时也更加人性化了,excel2007以上版本操作目前推荐使用,2007一下的版本可以用其它的库,这个库好像操作不了, read_only是只读模式,推荐使用False,除非你的表不需要再修改了,data_only仅数据模式,如果是True,那么读取出来的所有内容都是数据值,而不是其他(例如公式等),.active默认获取sheet1中的内容
# -*- coding:utf-8 -*-
"""
Author:不认输的小蜗牛
"""
import pymysql
from openpyxl import load_workbook
filename = './191220.xlsx'
workbook = load_workbook(filename, read_only=False, data_only=True)
ws = workbook.active
接下来就是读取文件了
这里就是我为什么说要推荐大家用3.0这个版本了,因为这个一句话,就能把所有数据遍历出来,同时还能控制读取的行和列,非常方便,如下,就是这么简单:
data = []
for row in ws.iter_rows(min_row=2, max_row=88, values_only=True):
print(row)
data.append(row)
最后,就是插入数据库了
如果你插入的数据是多行的,推荐你使用·executemany·方法,这个方法在插入多行数据时效率极高,同时一句话就能插入多条数据,在插入数据的时候,%s不要用引号引起来,executemany会自动加上的,数据格式必须是列表中存在元组类型。
conn = pymysql.Connection(host="localhost", user='4444', password='4444', database='test', charset="utf8")
cour = conn.cursor()
sql_str = "INSERT INTO t2(`name`, `type`, `fansNum`, `ArticleNum`, `Interzone`, `age`, `TotalPv`, `InterzonePV`, `InterAVGPv`, `InterzoneUV`, `InterzoneAvgUP`, `startTime`, `deadTime`, `Perppd`, `sign`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, "%s, %s, %s)"
cour.executemany(sql_str, data)
conn.commit()
cour.close()
conn.close()
以下是我的所有源代码,不懂的可以留言,我想应该讲的非常清楚了。
# -*- coding:utf-8 -*-
"""
Author:不认输的小蜗牛
"""
import pymysql
from openpyxl import load_workbook
filename = './191220.xlsx'
workbook = load_workbook(filename, read_only=False, data_only=True)
ws = workbook.active
data = []
for row in ws.iter_rows(min_row=2, max_row=88, values_only=True):
print(row)
data.append(row)
# 插入数据库
conn = pymysql.Connection(host="localhost", user='4444', password='4444', database='test', charset="utf8")
cour = conn.cursor()
sql_str = "INSERT INTO t2(" \
"`name`, `type`, `fansNum`, `ArticleNum`, " \
"`Interzone`, `age`, `TotalPv`, `InterzonePV`, " \
"`InterAVGPv`, `InterzoneUV`, `InterzoneAvgUP`, " \
"`startTime`, `deadTime`, `Perppd`, `sign`) VALUES " \
"(%s, %s, %s, %s, " \
"%s, %s, %s, %s," \
"%s, %s, %s, %s," \
"%s, %s, %s)"
cour.executemany(sql_str, data)
conn.commit()
cour.close()
conn.close()