You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQLAlchemy+pandas创建MySQL表未插入数据,求排查错误

排查与解决步骤

先从最常见的问题开始逐一排查:

1. 确认CSV是否被正确读取

很多时候表创建了但没数据,根源是pandas根本没读到CSV里的内容。在df = pd.read_csv(...)之后添加以下代码验证:

print(df.shape)  # 输出(行数, 列数),如果行数为0就是没读到数据
print(df.head()) # 打印前5行数据,直观确认内容

如果没读到数据:

  • 检查文件路径:用import os; print(os.getcwd())查看脚本当前工作目录,确认./data/artist.csv的相对路径是否正确,或者直接改用绝对路径(比如C:/project/data/artist.csv或/home/user/project/data/artist.csv)。
  • 检查文件编码:CSV文件可能用了非utf-8编码,尝试指定编码读取:
    df = pd.read_csv("./data/artist.csv", encoding="gbk") # 中文文件常用gbk编码
    # 或者尝试encoding="utf-8-sig"处理带BOM的utf-8文件
    

2. 调整数据库连接方式

你当前用engine.connect()返回的connection对象,有时会因为事务未提交导致数据没写入。可以试试两种调整方式:

  • 直接用engine对象作为con参数:
    df.to_sql("artist", con=engine, index=False, if_exists="replace")
    
  • 用事务上下文管理器确保自动提交:
    with engine.begin() as connection:
        df.to_sql("artist", con=connection, index=False, if_exists="replace")
    

3. 捕获具体错误信息

如果以上步骤都没问题,添加异常捕获代码,查看真实报错原因:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine("mysql://root:1234@localhost:3306/paintings")

try:
    df = pd.read_csv("./data/artist.csv")
    print(f"读取到{len(df)}条数据")
    with engine.begin() as connection:
        df.to_sql("artist", con=connection, index=False, if_exists="replace")
    print("数据插入成功")
except Exception as e:
    print(f"出错详情: {str(e)}")

常见的报错可能是数据类型不兼容(比如CSV里的字符串长度超过MySQL默认的varchar限制)、字段名包含MySQL保留字等,根据报错信息针对性调整即可。


内容的提问来源于stack exchange,提问作者Penguin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:25:05