python - 如何在将熊猫数据框保存到 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 在默认的字符串字段方面不太好......除了提供完整的模式(这将是矫枉过正)之外,解决此问题的建议方法是什么。
解决方案
不幸的是,使用 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);')
表名和索引列是从您的代码中引用的。
推荐阅读
- mongoose - Mongoose findById 将空对象转换为未定义
- r - 如何在指定的网格(例如 6 x 3)中绘制多个 UMAP?
- azure - Azure 服务总线 - 我可以查看计划的消息吗?
- java - 应用程序启动方法 java.lang.reflect.InvocationTargetException (JavaFx) 和 Java 中的异常
- android - 收到没有扩展名的 QuickBlox 文件附件
- db2 - CWBTF.EXE 的命令行开关,也就是来自 IBM i 的数据传输..?
- javascript - 如何在不切换到 TypeScript 的情况下将 TypeScript 类型添加到 JavaScript 模块?
- r - 我如何获得R中结果的相应单元格值
- javascript - 禁止缓存使用 base64 字符串构建的图像
- postgresql - 阻止 PostgreSQL 在多行中拆分值?