首页 > 解决方案 > Pandas 无法将数据导入 MySQL 数据库,列中有括号

问题描述

我尝试使用 pandas.to_sql 方法将数据上传到 MySQL 数据库:

df5.to_sql(full_table_name, con=engine, if_exists='append',chunksize=10000)

,但我收到错误消息:

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 '%(Location(LAC))s, %(CI(CI))s,
...附近使用的正确语法...
(此错误的背景:http:// sqlalche.me/e/13/f405 )

当我检查 sql server 日志时,我发现:

8 Query INSERT INTO kpi_d_ho (`index`, `Start Time`, `End Time`, `Location (LAC)`, `Cell (CI)`, `Node(Id)`, `Number of TD`) 
VALUES (0, '2020-12-01 00:00:00', '2020-12-02 00:00:00', %(Location (LAC))s, %(Cell (CI))s, %(Node(Id))s, 0)

我检查了数据框,是否可以 - 所有行都包含数字值(不是列名)。看起来熊猫发送到 MySQL 列名而不是值。当我删除列名中的括号时 - 我的脚本成功运行,那么为什么它不适用于包含括号的列?

标签: pythonmysqlpandas

解决方案


通过在 create_engine 函数中添加参数paramstyle="format"解决了这个问题。它是:

    engine = create_engine('mysql+mysqlconnector://xxx@xxx/xxx', echo=False, pool_recycle=3600)

现在它:

    engine = create_engine('mysql+mysqlconnector://xxx@xxx/xxx', echo=False, pool_recycle=3600, paramstyle="format")

推荐阅读