Запрос на обновление CQL не работает с использованием Python - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь обновить новый пароль после сброса на 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.Но, похоже, он не обновляется.

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Алекс абсолютно прав в том, что вам нужно предоставить полный 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, вы делаете это неправильно.

1 голос
/ 29 мая 2019

для обновления записи вам необходимо полностью предоставить первичный ключ (и). Он не будет работать с ALLOW FILTERING - сначала нужно получить все первичные ключи, которые вы хотите обновить, а затем выполнить отдельные команды обновления. См. документацию для более подробного описания команды UPDATE.

Если вы действительно хотите указать значение по умолчанию для некоторого столбца - почему бы просто не обработать его чем-то вроде .get('column', 'default-value')?

...