python - 运行 INSERT ... ON DUPLICATE KEY UPDATE 时出错

标签 python mysql pandas

我正在尝试合并 2 个相同的 mysql 表。一个称为 kpi_table,另一个称为 stage_kpi_table。两者都是聚合表,但 stage_kpi_table 是一个包含我需要添加到 kpi_table 的最新信息的表。这是我用来每天更新我的 kpis 的方法。 问题是我在运行更新时遇到以下错误: SQL 错误 [1136] [21S01]:列计数与第 1 行的值计数不匹配

我找到了很多线程并阅读了文档。但是我看不出我做错了什么。 我正在使用 pandas(在 python 3.7 中)to_sql 来创建表

这就是我在 python 中创建表的方式: kpi_df.to_sql('kpi_table', con=mysql_conn) 这是两个表的结构

CREATE TABLE `kpi_table` (
  `index` bigint(20) DEFAULT NULL,
  `date` datetime NOT NULL,
  `total_users` bigint(20) DEFAULT NULL,
  `concurrent` bigint(20) DEFAULT NULL,
  `new_users` double DEFAULT NULL,
  `_1dayActive` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`date`),
  KEY `ix_kpi_table_index` (`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

如您所见,我将“日期”字段设置为主键 这是我的数据样本

Out[272]: 
        date  total_users  concurrent  new_users  _1dayActive
0 2019-06-12            5           2        5.0            5
1 2019-06-13            8           3        3.0            7
2 2019-06-14           13           3        5.0           10
3 2019-06-15           13           2        0.0            6
4 2019-06-16           13           2        0.0            6
...

这是给出错误的查询(我直接在 mysql 编辑器 DBeaver 上测试它:

INSERT INTO kpi_table (`date`, `total_users`, `concurrent`, `new_users`, `_1dayActive`) 
(SELECT * FROM stage_kpi_table as skpi)
ON DUPLICATE KEY UPDATE total_users = (skpi.total_users);

我希望 kpi_table 与基于“日期”字段的其他表一起更新。如果日期存在,则更新值(本例中为“total_users”),否则插入新行。

我敢肯定这一定很傻,但我还没弄清楚。 非常感谢!! 劳尔。

最佳答案

INSERT INTO kpi_table ('date', 'total_users', 'concurrent', 'new_users', '_1dayActive')
(SELECT 'date', 'total_users', 'concurrent', 'new_users', '_1dayActive' FROM stage_kpi_table as skpi)
ON DUPLICATE KEY UPDATE total_users = (skpi.'total_users');

关于python - 运行 INSERT ... ON DUPLICATE KEY UPDATE 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57588853/

相关文章:

python - 如何在Canny边缘检测输出周围添加边界框?

C#:如何捕获MySql回滚中的异常

python - 如何使用字典重命名列?

python - 类变量对于 list 和 int 的行为不同?

python - 如何从 Anaconda 5.2(使用 python 3.6.6)升级到 Anaconda 5.3(使用 python 3.7)

python - 如何获取列表列表中特定元素的索引值?

php - 使用 PHP MySQL 从多个答案中选择正确答案?

mysql创建脚本,错误给我带来麻烦

python - Groupby Pandas 抛出 ValueError : Grouper and axis must be same length

python - dataframe.series 和 dataframe ['series' 之间有什么区别]?