首页 > 解决方案 > 如何在将熊猫数据框保存到 sql 时选择我的主键列

问题描述

我正在尝试使用以下内容将数据框保存到 mysql:

df.to_sql('dedupe__df', con=to_conn, if_exists='replace')

这将添加index作为主键。但是,如果我添加名为 的实际主键,则会path收到以下错误:

>>> df.to_sql('dedupe__df', con=to_conn, if_exists='replace', index_label='path')

ValueError:索引/列中的重复名称:无法插入路径,已存在

这到底是什么意思?它可能与熊猫试图将所有字符串字段保存为TEXT而不是 varchar 有关,就像我尝试在该字段上建立索引时一样(作为保存它的熊猫,我得到了):

> [MySQL] BLOB/TEXT column 'path' used in key specification without a key length

似乎 pandas 在默认的字符串字段方面不太好......除了提供完整的模式(这将是矫枉过正)之外,解决此问题的建议方法是什么。

标签: pythonsqlpandas

解决方案


不幸的是,使用 df.to_sql() 是不可能的。但是您可以按照以下给定方式进行操作:

df.to_sql('dedupe__df', engine, if_exists="replace", index=False)
with engine.connect() as con:
    con.execute('ALTER TABLE dedupe__df ADD PRIMARY KEY (path);')

表名和索引列是从您的代码中引用的。


推荐阅读