【问题标题】:MySQL Python ON DUPLICATE KEY UPDATE VALUESMySQL Python关于重复键更新值
【发布时间】:2019-07-20 11:01:07
【问题描述】:

我正在使用 python 将 JSON 数据上传到 MySQL。我需要在插入语句中包含“ON DUPLICATE KEY UPDATE VALUES”,但在 Python 中遇到了问题。

如果我运行以下代码,一切正常...

import json
import mysql.connector

mydb = mysql.connector.connect(host=x,user=x,password=x,database=x)
cursor = mydb.cursor()

json_data = json.loads(file)

for item in json_data['data']:
   cursor.execute(
       "INSERT INTO input_1 (a,b,c,d) VALUES (%s,%s,%s,%s)",
        (item['a'],item['b'],item['c'],item['d'])
   )

但是,当我将“ON DUPLICATE KEY”添加到末尾时...

import json
import mysql.connector

mydb = mysql.connector.connect(host=x,user=x,password=x,database=x)
cursor = mydb.cursor()

json_data = json.loads(file)

for item in json_data['data']:
   cursor.execute(
       "INSERT INTO input_1 (a,b,c,d) VALUES (%s,%s,%s,%s) ON DUPLICATE KEY UPDATE VALUES a=%s,b=%s,c=%s", 
       (item['a'],item['b'],item['c'],item['d'])
   )

我收到以下消息:

ProgrammingError: SQL 语句的参数不足

【问题讨论】:

  • a、b、c 列是唯一一行信息的主键。如果发现重复的主键,则 d 列将被更新,因此不应将其列在重复的值键中。
  • 你在sql代码中有7个参数,但在python中只提供了4个。请记住,准备好的语句不会知道它应该使用前三个参数两次!

标签: python mysql


【解决方案1】:

替换:

cursor.execute("INSERT INTO input_1 (a,b,c,d) VALUES (%s,%s,%s,%s) ON DUPLICATE KEY UPDATE VALUES a=%s,b=%s,c=%s", (item['a'],item['b'],item['c'],item['d']))

与:

cursor.execute("INSERT INTO input_1 (a,b,c,d) VALUES (%s,%s,%s,%s) ON DUPLICATE KEY UPDATE VALUES a=%s,b=%s,c=%s", (item['a'],item['b'],item['c'],item['d'],item['a'],item['b'],item['c']))

sql语句要求你有7个参数而不是4个。

【讨论】:

猜你喜欢
  • 2010-10-26
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2012-02-17
相关资源
最近更新 更多