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

使用Pandas to_sql导入Excel到MariaDB时如何跳过ID与时间戳列

问题原因

你当前的代码存在两个核心错误,导致写入结果不符合预期:

  • 读取Excel时设置了index_col=0,会把Excel的A列直接设为DataFrame索引,后续to_sql指定index=False会直接丢失第一列数据
  • 没有将DataFrame列名和数据库表第三列及之后的字段做匹配,默认写入逻辑会从表的第一列开始填数据,直接占用自增ID和时间戳的位置
可行解决方案

首先先确认你的MariaDB中guitest表结构符合要求,示例表结构如下(你可以根据自己的实际字段调整):

CREATE TABLE guitest (
    id INT AUTO_INCREMENT PRIMARY KEY,
    create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    field1 VARCHAR(255),
    field2 VARCHAR(255),
    field3 INT
);

修正后的导入代码:

import pandas as pd
from sqlalchemy import create_engine

# 读取Excel:取消index_col参数,保留所有原始列,无表头
df = pd.read_excel(r'C:/Users/Zlatan/Desktop/Project_PolymerSQL/guitest.xlsx', header=None)
# 给DataFrame设置列名,必须和数据库表第三列开始的字段名、顺序、数量完全对应
df.columns = ['field1', 'field2', 'field3']

# 创建数据库连接
engine = create_engine("mariadb+mariadbconnector://root:pass@127.0.0.1:3306/polymer")
# 写入数据,不需要处理ID和时间戳字段,数据库会自动生成对应值
df.to_sql('guitest', con=engine, if_exists='append', index=False)
注意事项
  • 代码中的['field1', 'field2', 'field3']要替换为你自己数据库表中第三列及之后的真实字段名
  • 确保表的时间戳字段设置了默认值(比如DEFAULT CURRENT_TIMESTAMP),写入时不需要传值会自动填充
  • 如果Excel列数和数据库表第三列开始的列数不匹配,需要提前做数据裁剪或补全

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:24:03