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


Posted in Python onAugust 27, 2019

因为需要对数据处理,将excel数据导入到数据库,记录一下过程。

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

直接丢代码,使用python3,注释比较清楚。

import xlrd
import pymysql
# import importlib
# importlib.reload(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 = 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记录数
  cursor.execute(select) #执行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): #第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是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) #执行sql语句
    db.commit()
  cursor.close() #关闭连接
insert_deta()
db.close()#关闭数据
print ("ok ")

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

说明:对于不规则的单元格,例如合并过的单元格会取到空值。

优化了一下这个程序

import pymysql
import xlrd 
# 连接数据库
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): # 第一行是标题名,对应表中的字段名所以应该从第二行开始,计算机以0开始计数,所以值是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) # 执行sql语句
    db.commit()
  cursor.close() # 关闭连接
open_excel()
insert_deta()

再改一下,每一万条数据写入到数据库一次

import pymysql
import xlrd
import sys 
'''
  连接数据库
  args:db_name(数据库名称)
  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函数
  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!")
 
 
'''
  执行插入操作
  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 ): # 每一万条数据执行一次插入
        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) # 执行sql语句
 
        num = 0 # 计数归零
        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() # 关闭连接
  db.close() 
 if __name__ == '__main__':
  store_to('demo', 'demo_yangben', 'xxx.xlsx')

思考,如果数据插入有错误,怎么解决,

其实有很多数据库工具可以直接来解决这个问题,注意字符转换的格式就好。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
python动态加载包的方法小结
Apr 18 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
python计算两个数的百分比方法
Jun 29 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
python实现京东秒杀功能
Jul 30 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
Python for循环与getitem的关系详解
Jan 02 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
Python性能测试工具Locust安装及使用
Dec 01 Python
pytest配置文件pytest.ini的详细使用
Apr 17 Python
python读取指定字节长度的文本方法
Aug 27 #Python
Django中的cookie和session
Aug 27 #Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 #Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 #Python
在Python中获取操作系统的进程信息
Aug 27 #Python
python3 下载网络图片代码实例
Aug 27 #Python
Python (Win)readline和tab补全的安装方法
Aug 27 #Python
You might like
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
重写javascript中window.confirm的行为
2012/10/21 Javascript
angular.bind使用心得
2015/10/26 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
2017/03/07 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
python数据封装json格式数据
2018/03/04 Python
分享Pycharm中一些不为人知的技巧
2018/04/03 Python
python如何实现数据的线性拟合
2019/07/19 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
汽车运用工程毕业生自荐信
2013/10/29 职场文书
演讲稿怎么写
2014/01/07 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
党支部三会一课计划
2014/09/24 职场文书
感动中国何玥观后感
2015/06/02 职场文书
毕业典礼致辞
2015/07/29 职场文书
公司行政管理制度范本
2015/08/05 职场文书
物业保洁员管理制度
2015/08/05 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
python热力图实现的完整实例
2022/06/25 Python