重置为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进行调用。但这似乎没有更新。
答案 0 :(得分:1)
要更新记录,您需要完全提供主键。它不适用于ALLOW FILTERING
-您需要首先获取要更新的所有主键,然后发出单独的更新命令。有关UPDATE命令的详细说明,请参见documentation。
如果您真的想为某些列指定默认值-为什么不简单地使用.get('column', 'default-value')
之类的值处理呢?
答案 1 :(得分:1)
Alex是绝对正确的,因为您需要为任何写操作提供完整的PRIMARY KEY
。删除ALLOW FILTERING
,只要您的主键定义为:PRIMARY KEY (username)
,查询就可以正常工作。
此外,最好的做法是参数化您的整个准备好的语句,而不是依赖password
的字符串格式。
query = session.prepare('update user.userdetails set "password"=? where "username"=?')
session.execute(query,[pwd,uname])
注意:如果在任何时候发现自己{em>需要 ALLOW FILTERING
指令,则说明您做错了。