使用Python把Excel里的数据导入MYSQL

14 篇文章 0 订阅
5 篇文章 0 订阅

使用Python把Excel里的数据导入MYSQL

大概有几百万行的数据,Excel分类7个文件保存,想要汇总起来,Excel肯定是用不了的,之前用Access做,但是Access不支持超过2G的文件,所以只好用MYSQL,想要把数据导入MYSQL,想来想去还是Python最方便

踩过的坑

先讲踩过了哪些坑:

  1. def定义函数的时候,一直不知道可以用return返回值,在这里折腾了很久,所幸最后发现了,于是第一次用了自定义函数,其实没有也可以跑,只是代码显得太难看;
  2. 数据中有日期字段,一开始读取过来的时候,一直只能读取value,导入到MYSQL的时候也只能以43322这样的形式导入,研究了很久,终于找到了便捷的转换函数;
  3. 数据中有时间字段,比如0.375123这样的,一直没找到合适的转换方法,只能以float的形式储存;
  4. 里面有价格字段,设置了允许null,字段为float格式,但是源文件里有null的时候还是会报错,这个问题困扰了我很久,最蠢的方式是设为VARCHAR格式,不会报错了,但是文本格式储存对后续的使用影响太大,后来用if函数来解决,勉强能用,但是显得代码很蠢,尝试用def,就是第1点说的问题,不知道用return,想要的值一直取不到;
  5. 增加了时间函数,用来看跑完这577万行数据需要用多少时间;
  6. 要注意Python里的缩进功能,在这里也吃了亏;
  7. 由于文件较大,所以在每次读取完一个文件后,显示读取情况,便于知道是否还在进行中。

参考文章

https://www.jianshu.com/p/2baf86abe57c

代码如下

import pymysql
import xlrd
import os
from datetime import datetime
from xlrd import xldate_as_tuple
from time import *
start_time = time()

# 先定义如果遇到NULL值如何处理,封装一个函数trans()
def trans(b):
    if b.ctype == 0:
        a = 0
    else:
        a = b.value
    return a
# 定义路径
path = r'F:\19'
# 首先打开文件
files = os.listdir(path)
for i in files:
    path1 = path + '\\'+i
    book = xlrd.open_workbook(path1)
    sheet = book.sheet_by_index(0)
    # 建立与MYSQL连接
    conn = pymysql.connect(
        host = 'localhost',
        user = 'root',
        passwd = '123456',
        db = 'db',
        port = 3306,
        charset = 'utf8mb4'
    )
    # 获得游标
    cur = conn.cursor()

    # 创建插入语句
    query = 'insert into apporder() values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'

   # 创建一个for循环读取excel内的每行数据
   # 从第二行开始是要跳过标题行
   # 括号里1代表从第二行开始(python计数从0开始)
    for r in range(1,sheet.nrows):
        x0 = sheet.cell(r,0).value
        x1 = sheet.cell(r,1).value
        x2 = sheet.cell(r,2).value
        x3 = sheet.cell(r, 3).value
        x4 = sheet.cell(r, 4).value
        x5 = sheet.cell(r, 5).value
        x6 = sheet.cell(r, 6).value
        x7 = sheet.cell(r, 7).value
        x8 = sheet.cell(r, 8).value
        x9 = sheet.cell(r, 9).value
        # x10 是日期数值,该数值不得为空
        x10 = datetime(*xldate_as_tuple(int(trans(sheet.cell(r, 10))), 0))
        x11 = sheet.cell(r, 11).value
        x12 = sheet.cell(r, 12).value
        x13 = sheet.cell(r, 13).value
        x14 = sheet.cell(r, 14).value
        x15 = sheet.cell(r, 15).value
        x16 = sheet.cell(r, 16).value
        x17 = sheet.cell(r, 17).value
        x18 = sheet.cell(r, 18).value
        x19 = sheet.cell(r, 19).value
        x20 = sheet.cell(r, 20).value
        x21 = sheet.cell(r, 21).value
        x22 = sheet.cell(r, 22).value
        x23 = trans(sheet.cell(r, 23))
        x24 = trans(sheet.cell(r, 24))
        x25 = trans(sheet.cell(r, 25))
        x26 = trans(sheet.cell(r, 26))
        x27 = sheet.cell(r, 27).value
        x28 = sheet.cell(r, 28).value
        x29 = trans(sheet.cell(r, 29))
        x30 = trans(sheet.cell(r, 30))
        x31 = sheet.cell(r, 31).value
        x32 = sheet.cell(r, 32).value
        x33 = sheet.cell(r, 33).value
        x34 = sheet.cell(r, 34).value
        x35 = sheet.cell(r, 35).value
        x36 = sheet.cell(r, 36).value
        x37 = sheet.cell(r, 37).value
        x38 = sheet.cell(r, 38).value
        x39 = sheet.cell(r, 39).value
        x40 = sheet.cell(r, 40).value

        values = (x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23,
        x24, x25, x26, x27, x28, x29, x30, x31, x32, x33, x34, x35, x36, x37, x38, x39, x40)
        # 执行query语句
        cur.execute(query, values)
    print('导入' + i + '成功')



    # close 关闭文档
    cur.close()
    # commit 提交
    conn.commit()
    # 关闭mysql链接
    conn.close()
# 显示导入的行数和列数
endtime = time()
ordertime = start_time - endtime
print(ordertime)


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用pandas和sqlalchemy库来实现将Excel数据导入MySQL数据库的功能。具体步骤如下: 1. 安装pandas和sqlalchemy库 可以使用pip命令进行安装: ``` pip install pandas sqlalchemy ``` 2. 读取Excel数据 使用pandas库的read_excel函数读取Excel文件数据,并将其转换为DataFrame对象: ```python import pandas as pd # 读取Excel文件 data = pd.read_excel('data.xlsx') ``` 3. 建立数据库连接 使用sqlalchemy库的create_engine函数建立与MySQL数据库的连接: ```python from sqlalchemy import create_engine # 建立数据库连接 engine = create_engine('mysql+pymysql://username:password@host:port/database_name') ``` 其,username为数据库用户名,password为密码,host为数据库主机名,port为端口号,database_name为要连接的数据库名称。 4. 将数据导入MySQL数据库 使用pandas库的to_sql函数将DataFrame对象数据导入MySQL数据库: ```python # 将数据导入MySQL数据库 data.to_sql('table_name', engine, index=False, if_exists='replace') ``` 其,table_name为要导入数据的表名,index=False表示不将DataFrame对象的索引列作为MySQL表的索引列,if_exists='replace'表示如果表已经存在,则先删除再重新创建。 完整的代码示例: ```python import pandas as pd from sqlalchemy import create_engine # 读取Excel文件 data = pd.read_excel('data.xlsx') # 建立数据库连接 engine = create_engine('mysql+pymysql://username:password@host:port/database_name') # 将数据导入MySQL数据库 data.to_sql('table_name', engine, index=False, if_exists='replace') ``` 需要根据实际情况修改连接数据库的参数和Excel文件路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

White_Mountain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值