使⽤python将excel数据导⼊数据库过程详解因为需要对数据处理,将excel数据导⼊到数据库,记录⼀下过程。
使⽤到的库:xlrd 和 pymysql (如果需要写到excel可以使⽤xlwt)
直接丢代码,使⽤python3,注释⽐较清楚。
import xlrd
import pymysql
# import importlib
# load(sys) #出现呢reload错误使⽤
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!")
#连接数据库
try:
db = t(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记录数
line_count = cursor.fetchone()
print(line_count[0])
def insert_deta():
sheet = open_excel()
cursor = db.cursor()
for i in range(1, ws): #第⼀⾏是标题名,对应表中的字段名所以应该从第⼆⾏开始,计算机以0开始计数,所以值是1
name = ll(i,0).value #取第i⾏第0列
data = ll(i,1).value#取第i⾏第1列,下⾯依次类推
print(name)
print(data)
value = (name,data)
python怎么读入excelprint(value)
sql = "INSERT INTO XXX(name,data)VALUES(%s,%s)"
dbmit()
cursor.close() #关闭连接
insert_deta()
db.close()#关闭数据
print ("ok ")
XXX⾥⾃⾏修改⾃⼰的名称。
说明:对于不规则的单元格,例如合并过的单元格会取到空值。
优化了⼀下这个程序
import pymysql
import xlrd
# 连接数据库
try:
db = t(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 = ws
for i in range(1, row_num): # 第⼀⾏是标题名,对应表中的字段名所以应该从第⼆⾏开始,计算机以0开始计数,所以值是1    row_data = w_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)"
dbmit()
cursor.close() # 关闭连接
open_excel()
insert_deta()
再改⼀下,每⼀万条数据写⼊到数据库⼀次
import pymysql
import xlrd
import sys
'''
连接数据库
args:db_name(数据库名称)
returns:db
'''
def mysql_link(de_name):
try:
db = t(host="127.0.0.1", user="xxx",
passwd="xxx",
db=xxx,
charset='utf8')
return db
except:
print("could not connect to mysql server")
'''
读取excel函数
args:excel_file(excel⽂件,⽬录在py⽂件同⽬录)
returns:book
'''
def open_excel(excel_file):
try:
book = xlrd.open_workbook(excel_file) # ⽂件名,把⽂件与py⽂件放在同⼀⽬录下
sizeof(book))
return book
except:
print("open excel file failed!")
'''
执⾏插⼊操作
args:db_name(数据库名称)
table_name(表名称)
excel_file(excel⽂件名,把⽂件与py⽂件放在同⼀⽬录下)
'''
def store_to(db_name, table_name, excel_file):
db = mysql_link(db_name) # 打开数据库连接
cursor = db.cursor() # 使⽤ cursor() ⽅法创建⼀个游标对象 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 = [] # 定义列表⽤来存放数据
num = 0 # ⽤来控制每次插⼊的数量
for i in range(1, row_num): # 第⼀⾏是标题名,对应表中的字段名所以应该从第⼆⾏开始,计算机以0开始计数,所以值是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) # 将数据暂存在列表
num += 1
if( num>= 10000 ): # 每⼀万条数据执⾏⼀次插⼊
sizeof(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)"
num = 0 # 计数归零
list.clear() # 清空list
print("worksheets: " + sheet + " has been inserted 10000 datas!")
print("worksheets: " + sheet + " has been inserted " + str(row_num) + " datas!")
dbmit() # 提交
cursor.close() # 关闭连接
db.close()
if __name__ == '__main__':
store_to('demo', 'demo_yangben', 'xxx.xlsx')
思考,如果数据插⼊有错误,怎么解决,
其实有很多数据库⼯具可以直接来解决这个问题,注意字符转换的格式就好。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。