需求 :excel的兑换码导入mysql中,总共有30W条数据。Navicat有自带功能,可以直接将excel的数据导入到mysql中,数据库太多,手动操作非常麻烦,使用python写了一个脚本。

使用pip导入xlrd,pymysql库。

import xlrd
import pymysql
import math
# book = xlrd.open_workbook('activity_password1.xlsx')
# sheet = book.sheet_by_name('@activity_password')
filelist = ['activity_password1.xlsx', 'activity_password2.xlsx', 'activity_password3.xlsx', \
            'activity_password4.xlsx', 'activity_password5.xlsx', 'activity_password6.xlsx', \
            'activity_password6_1.xlsx', 'activity_password7.xlsx', 'activity_password8.xlsx']
for i in range(1, 100):
    # 建立mysql连接
    conn = pymysql.connect(
            host = '127.0.0.1',
            user='root',
            passwd='123456',
            db='youxi' + str(i),
            port=3306,
            charset='utf8'
    # 获得游标
    cur = conn.cursor()
    sql = 'insert into gm_password (id, type, code, status) values (%s, %s, %s, %s)'
    for filename in filelist:
        book = xlrd.open_workbook(filename)
        sheet = book.sheet_by_name('@activity_password')
        for r in range(1, sheet.nrows):
            values = (sheet.cell(r, 0).value, sheet.cell(r, 1).value, sheet.cell(r, 2).value, sheet.cell(r, 3).value)
            cur.execute(sql, values)
        conn.commit()
    cur.close()
    conn.close()
    print ('youxi'+str(i)+' sucess')

执行了一下,速度满的简直不能忍。并且如果往外网导入数据,就是超时。进行优化。

优化之后的代码:

import xlrd
import pymysql
import math
# book = xlrd.open_workbook('activity_password1.xlsx')
# sheet = book.sheet_by_name('@activity_password')
filelist = ['activity_password1.xlsx', 'activity_password2.xlsx', 'activity_password3.xlsx', \
            'activity_password4.xlsx', 'activity_password5.xlsx', 'activity_password6.xlsx', \
            'activity_password6_1.xlsx', 'activity_password7.xlsx', 'activity_password8.xlsx']
for i in range(1100):
    # 建立mysql连接
    conn = pymysql.connect(
            host = '127.0.0.1',
            user='root',
            passwd = '123456',
            db='youxi' + str(i),
            port=3306,
            charset='utf8'
    # 获得游标
    cur = conn.cursor()
    for filename in filelist:
        book = xlrd.open_workbook(filename)
        sheet = book.sheet_by_name('@activity_password')
        ops = []
        for r in range(1, sheet.nrows):
            values = (sheet.cell(r, 0).value, sheet.cell(r, 1).value, sheet.cell(r, 2).value, sheet.cell(r, 3).value)
            ops.append(values)
        n = math.ceil(len(ops) / 5000)
        for n1 in range(0, n):
            cur.executemany('insert into gm_password (id, type, code, status) values (%s, %s, %s, %s)', ops[5000*n1:5000*(n1+1)])
    cur.close()
    conn.commit()
    conn.close()
    print ('youxi'+str(i)+' sucess')

优化点总结:
1、批量插入,然后再提交,而不是插一条提交一条。
2、将execute替换为executemany,但是也不要插入太多行,我的设置是5000。
3、不要自己拼接 SQL 语句。直接在executemany方法中执行。
4、减少commit次数,非常重要。

结果:一个数据库插入需要30s,已经满足需求,没有继续优化,应该还有可以继续优化的点。

入职新公司两个多月,发现这边的 数据 基础很差,没有维度建模的数仓,很多 数据 甚至没有系统承载,大量的 Excel 表,大量的人工处理工作,现阶段被迫“面向 Excel ”编程。本文主要介绍使用 Python 读取 Excel 数据 导入 数据 库的方法,供各位小伙伴参考。 Python 可以通过一些非常实用的包,如pandas,numpy等,对 数据 进行清洗,整理分析,合理利用 Python 可以提高我们处理分析 数据 的效率。 此代码将 导入 部分尽量通用,仅配置下面两项就可以进行 导入 了:从哪个 excel 导入 到哪个 mysql 表在程序中配置他们之间的字段如何对应写在 mysql 表中ps:id,create_time,update_time 这种常用字段写死在程序中即可。 1.环境介绍: python 版本:3.6.4 pymysql : 0.8.0 xlrd : 1.1.10 pymysql 安装pip install pymysql xlwt安装pip install xlrd 2.创建一个新表并 导入 excel 数据 代码示例注意:telphone为 数据 库名;yhtest为新创建的表名字import pymysql import xlrd # 读取 excel 中内容到 数据 库workbook ... 最近接到一个需求,就是将多个Eccel文件(表头相同;每个都非常大,约60多万行,每个都是!!)先合并在一起,再做一些处理,但是 Excel 表格一个文件根本存不下这么多!更别提打开再做处理,怎么办?当然是借助 Mysql 啦,利用 Python 脚本将每一个文件内容插入进去,(其实也可以单个依次 导入 ,但是有多个 Excel 文件,这样比较繁琐。更重要的是我会 Python 直接写个脚本) 主要用到的库有 xlrd pymysql , 注意 pymysql 不支持 python 3篇幅有限,只针对主要 操作 进行说明连接 数据 库首先 pymysql 需要连接 数据 库,我这里连接的是本地 数据 库( 数据 库叫lds714610)。conn = connect( host='localhost', port=3306, database='lds714610',user='root', charset='utf8')... 前言:本来想先在 excel 中将 数据 写好后再通过 mysql 管理工具将 excel 数据 导入 mysql 中的,但是,无论我怎么努力,发现总有些 数据 导入 不进去,弄了几次都没成功,不想在这个地方浪费时间了,于是有了这篇博客。 环境: python 3.6.8, mysql 5.7,openpyxl3.0.1, pymysql 第一步,打开 excel 文件: 首先 导入 相关模块,这里推荐使用openpyxl版本>... 【阅读全文】 python 在制作一些小工具上本身就有着得天独厚的优势,大多数非标准库的应用只需要进行简单的安装即可使用。 比如:使用 python excel 中的 数据 导入 mysql 数据 库表中,或是将 mysql 数据 库表中的 数据 直接导出为 excel 都只需要简单的几行代码就可以完成,假如使用Java来做这件事强那可就有些复杂了呢。 话不多说,接下来直接进入正题... 这里使用两个 python 的非标准库来 操作 ,一个是我们比较熟悉的pandas非标准库,使用它来完成 excel 相关的 数据 操作 。 另外一个则是sqlal.