python - 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 列名而不是值。当我删除列名中的括号时 - 我的脚本成功运行,那么为什么它不适用于包含括号的列?
解决方案
通过在 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")
推荐阅读
- random - 当碰撞可能且昂贵时,如何生成不重复的随机值?
- swift - 打开 UIPickerView 时出现的项目不被视为“已选择”
- rest - 在设计 REST API 时,是否可以要求在允许创建资源之前完成对资源的搜索?
- texmacs - TeXmacs 条件独立符号
- rust - 如何迭代使用 RwLock 构建的并发哈希映射的可变值?
- firebase - 如何使用 Flutter 更新云 Firestore 上文档的字段?
- c++ - Visual Studio 不运行我的代码,而其他 IDE 运行
- javascript - 无法将状态从父组件传递给子组件(番茄钟状态计数器)
- scala - Spark 2.0 - 将数据帧拆分为子数据帧而不使用 createOrReplaceTempView
- c# - 如何通过单击桌面上的文件来启动我的程序并读取文本文件