使用python将excel数据导入到mysql(或其它)数据库中

前言:本来想先在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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章