Python-Pandas读取Excel中数据写入MySQL的表中

实现功能: Pandas读取Excel中数据写入MySQL的表中。

MySQL表结构:

CREATE TABLE `test_excel_to_mysql` (
  `ast_id` varchar(100) DEFAULT NULL ,
  `equip_name` varchar(100) DEFAULT NULL ,
  `swid` varchar(100) DEFAULT NULL ,
  `psr_id` varchar(100) DEFAULT NULL ,
  `equip_type` varchar(100) DEFAULT NULL ,
  `provincial` varchar(100) DEFAULT NULL ,
  `cidy` varchar(100) DEFAULT NULL ,
  `operations_unit` varchar(100) DEFAULT NULL ,
  `substation` varchar(100) DEFAULT NULL ,
  `voltage_level` varchar(100) DEFAULT NULL ,
  `phase` varchar(100) DEFAULT NULL ,
  `run_state` varchar(100) DEFAULT NULL ,
  `model_number` varchar(100) DEFAULT NULL,
  `maker` varchar(100) DEFAULT NULL ,
  `production_date` varchar(100) DEFAULT NULL ,
  `product_id` varchar(100) DEFAULT NULL ,
  `start_up_date` varchar(100) DEFAULT NULL ,
  `project_number` varchar(100) DEFAULT NULL ,
  `project_name` varchar(100) DEFAULT NULL ,
  `wbs_code` varchar(100) DEFAULT NULL ,
  `asset` varchar(100) DEFAULT NULL ,
  `asset_type` varchar(100) DEFAULT NULL ,
  `subassembly` varchar(100) DEFAULT NULL ,
  `subassembly_type` varchar(100) DEFAULT NULL ,
  `ssswid` varchar(100) DEFAULT NULL ,
  `ssast_id` varchar(100) DEFAULT NULL ,
  `sfsc` varchar(100) DEFAULT NULL ,
  `tzknczdwt` varchar(100) DEFAULT NULL ,
  `sgsfk` varchar(100) DEFAULT NULL ,
  `tyfs` varchar(100) DEFAULT NULL ,
  `jyjz` varchar(100) DEFAULT NULL ,
  `rzxs` varchar(100) DEFAULT NULL ,
  `hzdz` varchar(100) DEFAULT NULL ,
  `tyrq` varchar(100) DEFAULT NULL ,
  `tynx` bigint DEFAULT NULL ,
  `tyys` bigint DEFAULT NULL ,
  `dqjj` bigint DEFAULT NULL ,
  `dqsj` bigint DEFAULT NULL ,
  `dqlx` bigint DEFAULT NULL ,
  `hxjj` bigint DEFAULT NULL ,
  `hxlx` bigint DEFAULT NULL ,
  `syxm` varchar(100) DEFAULT NULL ,
  `xmid` varchar(100) DEFAULT NULL ,
  `syzy` varchar(100) DEFAULT NULL ,
  `lxbz` varchar(100) DEFAULT NULL ,
  `sbtz` varchar(100) DEFAULT NULL ,
  `sypl` varchar(100) DEFAULT NULL 
) ;

 

Excel数据:

注意: Excel中首行必须为表中的字段名称。

 

Python代码:

import pymysql
import pandas as pd
from sqlalchemy import create_engine

# # 下面的方式将数据写入MySQL时报错:
# # pandas.errors.DatabaseError: Execution failed on sql '
# #         SELECT
# #             name
# #         FROM
# #             sqlite_master
# #         WHERE
# #             type IN ('table', 'view')
# #             AND name=?;
# #         ': not all arguments converted during string formatting
# #  为了解决该问题,需要引用sqlalchemy这个第三方ORM库来进行连接。
#
# # 连接MySQL数据库
# connection = pymysql.connect(host='localhost', user='root', password='Root@1234', db='test')
#
# # 读取Excel文件 (Excel中第一行必须为表中的字段名称)
# df = pd.read_excel('C:\\Users\\65742\\Desktop\\20240829\\断路器.xlsx')
#
# # 将DataFrame中的数据插入到MySQL表中
# df.to_sql(name='excel_to_mysql', con=connection, if_exists='append')
#
# # 关闭数据库连接
# connection.close()


# 读取Excel文件 (Excel中第一行必须为表中的字段名称)
df = pd.read_excel('C:\\Users\\65742\\Desktop\\20240829\\断路器.xlsx')

# 数据库的连接和认证信息
username = "root"
password = "Root@1234"
hostIP = "localhost"
port = "3306"
database = "test"

# 替换密码中的'@'为'%40'
password_encoded = password.replace("@","%40")

# 创建连接MySQL的engine(即connection)
engine = create_engine(
        "mysql+pymysql://" + username + ":" + password_encoded + "@" + hostIP + ":" + port + "/" + database
        # mysql+pymysql://用户:密码@url:端口/数据库
    )

# 将DataFrame中的数据插入到MySQL表中,(采用追加模式)
df.to_sql(name="test_excel_to_mysql", con=engine, index=False, if_exists="append")

运行该代码即可将Excel中的数据写入MySQL。

 

MySQL查询表:

 

posted @ 2024-08-29 18:09  业余砖家  阅读(68)  评论(0编辑  收藏  举报