日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python接入excel_使用python将excel数据导入数据库过程详解

發(fā)布時(shí)間:2024/1/23 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python接入excel_使用python将excel数据导入数据库过程详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

因?yàn)樾枰獙?shù)據(jù)處理,將excel數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫,記錄一下過程。

使用到的庫:xlrd 和 pymysql (如果需要寫到excel可以使用xlwt)

直接丟代碼,使用python3,注釋比較清楚。

import xlrd

import pymysql

# import importlib

# importlib.reload(sys) #出現(xiàn)呢reload錯(cuò)誤使用

def open_excel():

try:

book = xlrd.open_workbook("XX.xlsx") #文件名,把文件與py文件放在同一目錄下

except:

print("open excel file failed!")

try:

sheet = book.sheet_by_name("sheet名稱") #execl里面的worksheet1

return sheet

except:

print("locate worksheet in excel failed!")

#連接數(shù)據(jù)庫

try:

db = pymysql.connect(host="127.0.0.1",user="root",

passwd="XXX",

db="XXX",

charset='utf8')

except:

print("could not connect to mysql server")

def search_count():

cursor = db.cursor()

select = "select count(id) from XXXX" #獲取表中xxxxx記錄數(shù)

cursor.execute(select) #執(zhí)行sql語句

line_count = cursor.fetchone()

print(line_count[0])

def insert_deta():

sheet = open_excel()

cursor = db.cursor()

for i in range(1, sheet.nrows): #第一行是標(biāo)題名,對應(yīng)表中的字段名所以應(yīng)該從第二行開始,計(jì)算機(jī)以0開始計(jì)數(shù),所以值是1

name = sheet.cell(i,0).value #取第i行第0列

data = sheet.cell(i,1).value#取第i行第1列,下面依次類推

print(name)

print(data)

value = (name,data)

print(value)

sql = "INSERT INTO XXX(name,data)VALUES(%s,%s)"

cursor.execute(sql,value) #執(zhí)行sql語句

db.commit()

cursor.close() #關(guān)閉連接

insert_deta()

db.close()#關(guān)閉數(shù)據(jù)

print ("ok ")

XXX里自行修改自己的名稱。

說明:對于不規(guī)則的單元格,例如合并過的單元格會(huì)取到空值。

優(yōu)化了一下這個(gè)程序

import pymysql

import xlrd

# 連接數(shù)據(jù)庫

try:

db = pymysql.connect(host="127.0.0.1", user="root",

passwd="XXX",

db="XXX",

charset='utf8')

except:

print("could not connect to mysql server")

def open_excel():

try:

book = xlrd.open_workbook("XXX.xlsx") #文件名,把文件與py文件放在同一目錄下

except:

print("open excel file failed!")

try:

sheet = book.sheet_by_name("XXX") #execl里面的worksheet1

return sheet

except:

print("locate worksheet in excel failed!")

def insert_deta():

sheet = open_excel()

cursor = db.cursor()

row_num = sheet.nrows

for i in range(1, row_num): # 第一行是標(biāo)題名,對應(yīng)表中的字段名所以應(yīng)該從第二行開始,計(jì)算機(jī)以0開始計(jì)數(shù),所以值是1

row_data = sheet.row_values(i)

value = (row_data[0],row_data[1],row_data[2],row_data[3])

print(i)

sql = "INSERT INTO demo_yangben(xxx,xxxx,xxxx,xxxx)VALUES(%s,%s,%s,%s)"

cursor.execute(sql, value) # 執(zhí)行sql語句

db.commit()

cursor.close() # 關(guān)閉連接

open_excel()

insert_deta()

再改一下,每一萬條數(shù)據(jù)寫入到數(shù)據(jù)庫一次

import pymysql

import xlrd

import sys

'''

連接數(shù)據(jù)庫

args:db_name(數(shù)據(jù)庫名稱)

returns:db

'''

def mysql_link(de_name):

try:

db = pymysql.connect(host="127.0.0.1", user="xxx",

passwd="xxx",

db=xxx,

charset='utf8')

return db

except:

print("could not connect to mysql server")

'''

讀取excel函數(shù)

args:excel_file(excel文件,目錄在py文件同目錄)

returns:book

'''

def open_excel(excel_file):

try:

book = xlrd.open_workbook(excel_file) # 文件名,把文件與py文件放在同一目錄下

print(sys.getsizeof(book))

return book

except:

print("open excel file failed!")

'''

執(zhí)行插入操作

args:db_name(數(shù)據(jù)庫名稱)

table_name(表名稱)

excel_file(excel文件名,把文件與py文件放在同一目錄下)

'''

def store_to(db_name, table_name, excel_file):

db = mysql_link(db_name) # 打開數(shù)據(jù)庫連接

cursor = db.cursor() # 使用 cursor() 方法創(chuàng)建一個(gè)游標(biāo)對象 cursor

book = open_excel(excel_file) # 打開excel文件

sheets = book.sheet_names() # 獲取所有sheet表名

for sheet in sheets:

sh = book.sheet_by_name(sheet) # 打開每一張表

row_num = sh.nrows

print(row_num)

list = [] # 定義列表用來存放數(shù)據(jù)

num = 0 # 用來控制每次插入的數(shù)量

for i in range(1, row_num): # 第一行是標(biāo)題名,對應(yīng)表中的字段名所以應(yīng)該從第二行開始,計(jì)算機(jī)以0開始計(jì)數(shù),所以值是1

row_data = sh.row_values(i) # 按行獲取excel的值

value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5], \

row_data[6], row_data[7], row_data[8], row_data[9], row_data[10], row_data[11], row_data[12],

row_data[13], row_data[14])

list.append(value) # 將數(shù)據(jù)暫存在列表

num += 1

if( num>= 10000 ): # 每一萬條數(shù)據(jù)執(zhí)行一次插入

print(sys.getsizeof(list))

sql = "INSERT INTO " + table_name + " (time, xingbie, afdd, xzb, yzb, cfbj, jjlbmc, \

bjlbmc, bjlxmc, bjlxxlmc, gxqymc,gxdwmc, afql, afxqxx, cjdwmc)\

VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"

cursor.executemany(sql, list) # 執(zhí)行sql語句

num = 0 # 計(jì)數(shù)歸零

list.clear() # 清空list

print("worksheets: " + sheet + " has been inserted 10000 datas!")

print("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!")

db.commit() # 提交

cursor.close() # 關(guān)閉連接

db.close()

if __name__ == '__main__':

store_to('demo', 'demo_yangben', 'xxx.xlsx')

思考,如果數(shù)據(jù)插入有錯(cuò)誤,怎么解決,

其實(shí)有很多數(shù)據(jù)庫工具可以直接來解決這個(gè)問題,注意字符轉(zhuǎn)換的格式就好。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

本文標(biāo)題: 使用python將excel數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫過程詳解

本文地址: http://www.cppcns.com/jiaoben/python/270270.html

總結(jié)

以上是生活随笔為你收集整理的python接入excel_使用python将excel数据导入数据库过程详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。