Python MySQL ON DUPLICATE KEY UPDATE - 只想更新一些列

时间:2015-08-19 23:54:39

标签: python mysql

我试图用Python更新MySQL中的记录(如果存在更新,当然)。到目前为止,我的初始查询看起来像这样并且工作正常:

cursor.execute("""INSERT into orders (`record_id`, `order_id`, `asin`, `item_price`, `promotion_discount`, `quantity`, `promotion_id`, `purchase_date`, `status`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)""", (recordID, orderID, asin, itemPrice, promotionDiscount, qty, promotionId, purchaseDate, status))

现在,我的困境是如果我只想更新itemPrice和status - 我是否必须更新所有字段 - 下面的代码有错误:

TypeError: not enough arguments for format string

以下是对此的查询:

cursor.execute("""INSERT into orders (`record_id`, `order_id`, `asin`, `item_price`, `promotion_discount`, `quantity`, `promotion_id`, `purchase_date`, `status`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE (`record_id`, `order_id`, `asin`, `item_price`, `promotion_discount`, `quantity`, `promotion_id`, `purchase_date`, `status`) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s)""", (recordID, orderID, asin, itemPrice, promotionDiscount, qty, promotionId, purchaseDate, status)) 

recordID是唯一键

真的,我只需要更新几个字段,但由于已经定义了占位符,我不知道该怎么做。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

这样做会尝试插入,如果由于重复键错误而失败,它会将值提供给更新的格式:

try:
    your query

except mysql.connector.IntegrityError:
    cursor.execute("UPDATE orders set item_price = {0}, status = '{1}' where record_id = {3}".format(itemPrice, status, record_id))