CQL更新查询无法使用Python

时间:2019-05-29 10:33:44

标签: python flask cassandra cql

重置为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 个答案:

答案 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指令,则说明您做错了。