使用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()

 

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