You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyMySQL执行含ON DUPLICATE KEY UPDATE的SQL报错求助

问题排查与解决方案

语法错误原因

  1. SQL解析歧义:部分MariaDB版本对ON DUPLICATE KEY与UPDATE分行的写法存在解析异常,触发1064语法错误。
  2. 缺少唯一约束:ON DUPLICATE KEY UPDATE依赖表中存在唯一键或主键(通常是title字段),若未设置该约束,不仅子句无法生效,还可能引发解析层面的异常提示。

修复方案

1. 修正SQL语句

将ON DUPLICATE KEY与UPDATE合并为一行,消除解析歧义:

with conn.cursor() as cursor:
    sql = '''
        INSERT INTO `Tag` (`title`,`weight`) VALUES (%s,%s)
        ON DUPLICATE KEY UPDATE
        title = VALUES(title),
        weight = VALUES(weight)
    '''
    L1 = ['ins', 'ig', 'twitter', 'tiktok', 'ig']
    # 用Counter高效统计频次,替代原有的去重+count写法
    from collections import Counter
    count_result = Counter(L1)
    values = list(count_result.items())
    cursor.executemany(sql, values)
    conn.commit()

2. 给表添加唯一约束

登录MariaDB执行以下SQL,为title字段添加唯一索引(如果title不是主键的话):

ALTER TABLE `Tag` ADD UNIQUE INDEX idx_tag_title (`title`);

额外优化说明

  • 原代码用set去重后再调用L1.count(item)的时间复杂度为O(n²),改用collections.Counter可将复杂度降至O(n),效率更高。
  • 若title已经是表的主键,无需重复添加唯一索引,主键本身具备唯一约束属性。

内容的提问来源于stack exchange,提问作者Jimmy Xee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:50:23