【问题标题】:Pandas cannot import data to MySQL database with brackets in columnPandas 无法将数据导入 MySQL 数据库,列中有括号
【发布时间】:2020-12-04 23:56:28
【问题描述】:

我尝试使用 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 列名而不是值。当我删除列名中的括号时 - 我的脚本成功运行,那么为什么它不适用于包含括号的列?

【问题讨论】:

  • 位置CELL和节点没有填充数据,只有列名,所以你必须检查一下
  • 我会避免表名和列的括号和空格等特殊字符。然后命名参数可以工作。加上查询更容易。

标签: python mysql pandas


【解决方案1】:

通过在 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")

【讨论】:

    猜你喜欢
    • 2016-10-10
    • 1970-01-01
    • 2017-11-13
    • 2017-11-29
    • 2017-01-13
    • 2019-10-17
    • 2015-05-21
    • 1970-01-01
    • 2018-02-05
    相关资源
    最近更新 更多