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