Python读取Excel/CSV到MySQL

【1】Python读取CSV到MySQL

python 复制代码
import pandas as pd
from sqlalchemy import create_engine

# 数据库连接参数(请根据你的实际配置修改)
DB_USER = 'root'      # 如 root
DB_PASSWORD = '123456'  # 如 123456
DB_HOST = 'localhost'          # 或 127.0.0.1
DB_PORT = 3306
DB_NAME = 'travel_pmm'

# 构建数据库连接 URL
engine_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4"

# 创建 SQLAlchemy 引擎
engine = create_engine(engine_url, echo=False)

# 读取 CSV 文件(假设文件在当前目录下)
df = pd.read_csv('trip_fujian_scenic_detail_20260214_155519.csv', encoding='utf-8')

# 可选:查看前几行确保数据正确
print(df.head())
print(df.dtypes)

# 将数据写入 MySQL 表(表名设为 travel_records)
# if_exists: 'fail'(默认), 'replace'(删旧建新), 'append'(追加)
df.to_sql(
    name='trip_fujian_scenic_detail',
    con=engine,
    if_exists='replace',  # 第一次用 replace,后续可用 append
    index=False,          # 不写入 pandas 的索引
    chunksize=1000        # 分批插入,提高性能
)

【2】Python读取xls到MySQL

python 复制代码
import pandas as pd
from sqlalchemy import create_engine

# === 1. 配置 MySQL 连接信息 ===
DB_USER = 'root'      # 如 root
DB_PASSWORD = '123456'  # 如 123456
DB_HOST = 'localhost'
DB_PORT = 3306
DB_NAME = 'travel_pmm'         # 你的数据库名

# 构建连接 URL(注意:charset=utf8mb4 支持 emoji 和中文)
engine_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4"

# 创建数据库引擎
engine = create_engine(engine_url, echo=False)  # echo=True 可打印 SQL 日志

# === 2. 读取 Excel 文件 ===
# 假设文件名为 data.xlsx,位于当前目录
file_path = '1994-2024年度旅游数据3.xls'

# 读取第一个 sheet(默认)
df = pd.read_excel(file_path, engine='xlrd')
# df = pd.read_excel(file_path, engine='openpyxl')

# 如果要读取特定 sheet,用:
# df = pd.read_excel(file_path, sheet_name='Sheet1', engine='openpyxl')

# 可选:查看数据
print("✅ 数据前5行:")
print(df.head())
print("\n✅ 数据类型:")
print(df.dtypes)

# === 3. 数据清洗(可选但推荐)===
# 示例:去除列名前后空格
df.columns = df.columns.str.strip()

# 示例:处理 NaN 值(MySQL 不喜欢 NaN)
df = df.where(pd.notnull(df), None)  # 将 NaN 转为 None(对应 SQL 的 NULL)

# === 4. 写入 MySQL ===
table_name = 'travel_money_data'  # 目标表名

df.to_sql(
    name=table_name,
    con=engine,
    if_exists='append',   # 'fail'(默认), 'replace'(删表重建), 'append'(追加)
    index=False,          # 不写入 pandas 的行索引
    chunksize=1000,       # 分批插入,提升性能
    method='multi'        # 使用多值插入,加速
)

print(f"\n✅ 成功将 {len(df)} 行数据写入 MySQL 表 `{DB_NAME}.{table_name}`!")

【3】Python读取xlsx到MySQL

python 复制代码
import pandas as pd
from sqlalchemy import create_engine

# === 1. 配置 MySQL 连接信息 ===
DB_USER = 'root'      # 如 root
DB_PASSWORD = '123456'  # 如 123456
DB_HOST = 'localhost'
DB_PORT = 3306
DB_NAME = 'travel_pmm'         # 你的数据库名

# 构建连接 URL(注意:charset=utf8mb4 支持 emoji 和中文)
engine_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4"

# 创建数据库引擎
engine = create_engine(engine_url, echo=False)  # echo=True 可打印 SQL 日志

# === 2. 读取 Excel 文件 ===
# 假设文件名为 data.xlsx,位于当前目录
file_path = '1994-2024年度旅游数据3.xls'

# 读取第一个 sheet(默认)
df = pd.read_excel(file_path, engine='openpyxl')

# 如果要读取特定 sheet,用:
# df = pd.read_excel(file_path, sheet_name='Sheet1', engine='openpyxl')

# 可选:查看数据
print("✅ 数据前5行:")
print(df.head())
print("\n✅ 数据类型:")
print(df.dtypes)

# === 3. 数据清洗(可选但推荐)===
# 示例:去除列名前后空格
df.columns = df.columns.str.strip()

# 示例:处理 NaN 值(MySQL 不喜欢 NaN)
df = df.where(pd.notnull(df), None)  # 将 NaN 转为 None(对应 SQL 的 NULL)

# === 4. 写入 MySQL ===
table_name = 'travel_money_data'  # 目标表名

df.to_sql(
    name=table_name,
    con=engine,
    if_exists='append',   # 'fail'(默认), 'replace'(删表重建), 'append'(追加)
    index=False,          # 不写入 pandas 的行索引
    chunksize=1000,       # 分批插入,提升性能
    method='multi'        # 使用多值插入,加速
)

print(f"\n✅ 成功将 {len(df)} 行数据写入 MySQL 表 `{DB_NAME}.{table_name}`!")
相关推荐
Scott9999HH6 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
AI云海7 小时前
python 列表、元组、集合和字典
开发语言·python
二十雨辰8 小时前
[爬虫]-Urllib
爬虫·python
Database_Cool_8 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
Database_Cool_9 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
玉鸯10 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
姜太小白10 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
weixin_4462608510 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao10 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest