Postgres запрос, который обновляет только изменения - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу написать один запрос ОБНОВЛЕНИЕ, как я хочу изменить только имя человека, но мой запрос был установлен

"""UPDATE person SET name='{name}', age={age} 
WHERE id={id}""".format(id=id,name=name,age=age) 

, но передача параметра была name='New name' и age=Null был назначен но он включает в себя параметр * /?id=1&name=newname&age=null

Кто-нибудь может помочь мне пройти через это?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Я не знаю, что поддерживает ваш ORM, вы даже не удосужились рассказать нам, что это было. Но если важно иногда обновлять возраст, но не в другое время (пропущено значение NULL), вы можете использовать следующее:

update person 
   set name = parmerter_for_name
     , age  = coalesce(parameter_for_age, age)
 where id = parameter_for_id;

Так что для вашего ORM возможно что-то вроде:

"""update person set name = '{name}', age  = coalesce('{age}', age)
 WHERE id={id}""".format(id=id,name=name,age=age)
0 голосов
/ 29 апреля 2020

Может быть, это поможет.

update_str = "name='{name}'"
if age:
    update_str += ',age={age}'

query = """UPDATE person SET {update_str} WHERE id={id}""".format(id=id, update_str=update_str)

Примечание: никогда не используйте это, так как это склонно к SQL инъекции. Вы должны передать параметр на основе поддержки ORM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...