使用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
相关产品推荐
相关产品推荐

