Параметризация ON DUPLICATE KEY UPDATE

Поэтому у меня запущен SQL-запрос на python, который добавит данные в базу данных, но мне интересно, есть ли дублирующий ключ, который просто обновляет пару полей. Данные, которые я использую, составляют около 30 столбцов, и мне интересно, есть ли способ сделать это.

data = [3, "hello", "this", "is", "random", "data",.......,44] #this being 30 items long
car_placeholder = ",".join(['%s'] * len(data))
qry = f"INSERT INTO car_sales_example VALUES ({car_placeholder}) ON DUPLICATE KEY UPDATE 
                         Price = {data[15]}, IdNum = {data[29]}"
cursor.execute(qry, data)
conn.commit()

Я хочу иметь возможность добавить запись, если ключ не существует, но если это так, обновите некоторые из столбцов в записи, которые представляют собой Price и IdNum, которые находятся в нечетных местах в наборе данных. Это вообще возможно?

Если это не так, есть ли способ обновить каждый столбец в базе данных без явного указания. Например

qry = f"INSERT INTO car_sales_example VALUES ({car_placeholder}) ON DUPLICATE KEY UPDATE 
                        car_sales_example VALUES ({car_placeholder})"

вместо того, чтобы идти столбец за столбцом ->

ON DUPLICATE KEY UPDATE Id = %s, Name = %s, Number = %s, etc... #for 30 columns

Всего 1 ответ


В ON DUPLICATE KEY UPDATE вы можете использовать функцию VALUES() с именем столбца, чтобы получить значение, которое было бы вставлено в этот столбец.

ON DUPLICATE KEY UPDATE price = VALUES(price), idnum = VALUES(idnum)

Есть идеи?

10000