Параметризация ON DUPLICATE KEY UPDATE - PullRequest
0 голосов
/ 23 марта 2020

Итак, у меня есть 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 Ответ

1 голос
/ 23 марта 2020

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

ON DUPLICATE KEY UPDATE price = VALUES(price), idnum = VALUES(idnum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...