Я пытаюсь обновить новый пароль после сброса на cassandra db. Это запрос, который я написал, где поля имени пользователя и пароля являются динамическими. Это правильно?
def update_db(uname, pwd):
query = session.prepare('update user.userdetails set "password"=%s where "username" = ? ALLOW FILTERING', pwd)
session.execute(query, (uname,))
update_db(username, new_pwd)
Я вызываю это через API. Но вроде не обновляется.
для обновления записи вам необходимо полностью предоставить первичный ключ(и). С ALLOW FILTERING
не получится — нужно сначала получить все первичные ключи, которые вы хотите обновить, а потом выдавать отдельные команды обновления. См. документация для более подробного описания команды UPDATE.
Если вы действительно хотите указать значение по умолчанию для некоторого столбца — почему бы просто не обработать его чем-то вроде .get('column', 'default-value')
?
Алекс абсолютно прав в том, что вам нужно предоставить полный PRIMARY KEY
для любой операции записи. Удалите ALLOW FILTERING
, и ваш запрос должен работать, пока ваше определение первичного ключа: PRIMARY KEY (username)
.
Кроме того, рекомендуется параметризовать подготовленный оператор весь вместо того, чтобы полагаться на форматирование строки для password
.
query = session.prepare('update user.userdetails set "password"=? where "username"=?')
session.execute(query,[pwd,uname])
Примечание. Если в какой-то момент вы обнаружите, что нуждающийся директива ALLOW FILTERING
, вы делаете это неправильно.