• Python使用pymysql和xlrd2将Excel数据导入MySQL数据库


    在数据处理和管理中,有时候需要将Excel文件中的数据导入到MySQL数据库中进行进一步的分析和操作。本文将介绍如何使用Python编程语言实现这个过程。

    导入所需库

    import xlrd2  # 导入xlrd2库,用于读取Excel文件
    import pymysql  # 导入pymysql库,用于连接和操作MySQL数据库
    from datetime import datetime  # 导入datetime库,用于处理日期和时间

    这部分代码导入了xlrd2库用于读取Excel文件,pymysql库用于连接和操作MySQL数据库,以及datetime库用于处理日期和时间。

    连接到MySQL数据库

    mydb = pymysql.connect(
        host="localhost",
        user="root",
        passwd="123456",
        db="test"
    )

    通过pymysql.connect()函数连接到MySQL数据库。需要提供数据库的主机名、用户名、密码和数据库名称。

    打开Excel文件并获取表头

    workbook = xlrd2.open_workbook(r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')
    sheet = workbook.sheet_by_index(0)  # 获取第一个工作表
    
    header = [cell.value for cell in sheet.row(0)]

    使用xlrd2.open_workbook()函数打开Excel文件,并使用sheet_by_index()方法获取第一个工作表。然后通过sheet.row(0)获取第一行的单元格对象,并使用列表推导式将每个单元格的值添加到header列表中。

     创建游标对象

    cursor = mydb.cursor()

    使用mydb.cursor()方法创建游标对象,用于执行SQL语句。

    遍历每一行数据并插入到数据库中

    复制代码
    for row_idx in range(1, sheet.nrows):  # 从第二行开始遍历
        row_data = []
        for cell in sheet.row(row_idx):
            if cell.ctype == xlrd2.XL_CELL_DATE:
                cell_value = xlrd2.xldate.xldate_as_datetime(cell.value, workbook.datemode)
                row_data.append(cell_value.strftime('%Y-%m-%d %H:%M:%S'))
            else:
                row_data.append(cell.value)
    
        sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
        cursor.execute(sql, row_data)
    
        print(f"正在插入第{row_idx}条数据")
    复制代码

    通过for循环遍历Excel文件的每一行数据(从第二行开始)。在内部循环中,判断单元格的数据类型是否为日期类型,如果是,则将其转换为字符串格式并按照指定的格式进行调整;否则,直接将其添加到row_data列表中。

    然后,使用', '.join(header)', '.join(['%s'] * len(header))构建插入数据的SQL语句,其中header为表头的字段名,'%s' * len(header)表示占位符的数量与字段数相同。

    最后,使用游标对象的execute()方法执行SQL语句,并传入row_data作为参数,将行数据插入到数据库中。

    提交更改并关闭数据库连接

    mydb.commit()
    cursor.close()
    mydb.close()

    使用mydb.commit()提交对数据库的更改,并使用cursor.close()关闭游标对象。最后,使用mydb.close()关闭与数据库的连接。

    完整代码如下:

    复制代码
    import xlrd2  # 导入xlrd2库,用于读取Excel文件
    import pymysql  # 导入pymysql库,用于连接和操作MySQL数据库
    from datetime import datetime  # 导入datetime库,用于处理日期和时间
    
    # 连接到MySQL数据库
    mydb = pymysql.connect(
        host="localhost",
        user="root",
        passwd="123456",
        db="test"
    )
    
    # 打开Excel文件
    workbook = xlrd2.open_workbook(r'E:\重新开始\Python操作MySQL数据库\sheet1.xlsx')
    sheet = workbook.sheet_by_index(0)  # 获取第一个工作表
    
    # 获取表头(即Excel文件的第一行数据)
    header = [cell.value for cell in sheet.row(0)]
    
    # 创建游标对象,用于执行SQL语句
    cursor = mydb.cursor()
    
    # 遍历每一行数据,并将其插入到数据库中
    for row_idx in range(1, sheet.nrows):  # 从第二行开始遍历
        row_data = []
        for cell in sheet.row(row_idx):
            # 处理时间类型的字段
            if cell.ctype == xlrd2.XL_CELL_DATE:  # 判断单元格的数据类型是否为日期类型
                cell_value = xlrd2.xldate.xldate_as_datetime(cell.value, workbook.datemode)
                # 将日期类型转换为字符串格式,并按照指定的格式进行调整
                row_data.append(cell_value.strftime('%Y-%m-%d %H:%M:%S'))
            else:
                row_data.append(cell.value)  # 将其他类型的数据直接添加到行数据列表中
    
        # 构建插入数据的SQL语句
        sql = f"INSERT INTO yonghu ({', '.join(header)}) VALUES ({', '.join(['%s'] * len(header))})"
        # 执行SQL语句,将行数据插入到数据库中
        cursor.execute(sql, row_data)
    
        # 显示当前正在插入第几条数据
        print(f"正在插入第{row_idx}条数据")
    
    # 提交更改并关闭数据库连接
    mydb.commit()
    cursor.close()
    mydb.close()
    复制代码

     

  • 相关阅读:
    第四十八章 开发自定义标签 - 在action中使用csr标签
    【UE 网络】专用服务器和多个客户端加入游戏会话的过程,以及GameMode、PlayerController、Pawn的创建流程
    第七章 贝叶斯分类器(下)
    基于ssm的潮牌运动服饰数码商城管理系统(idea+spring+springmvc+mybatis+jsp)
    【WebService】C#搭建的标准WebService接口,在使ESB模版作为参数无法获取参数数据
    如何在Vue中实现拖拽上传文件
    pytorch笔记:TRIPLETMARGINLOSS
    C++-Cmake指令:target_link_libraries
    【ACM学习】【STL】关联容器的分类
    linux 性能分析 --chatGPT
  • 原文地址:https://www.cnblogs.com/lcl-cn/p/17796070.html