我试图用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是唯一键
真的,我只需要更新几个字段,但由于已经定义了占位符,我不知道该怎么做。任何帮助表示赞赏。
答案 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))