CQL 更新查询无法使用 Python
CQL update query not working using Python
我正在尝试在重置为 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 命令的更多详细说明,请参阅 documentation。
如果您真的想为某些列指定默认值 - 为什么不简单地用 .get('column', 'default-value')
之类的东西来处理它?
Alex 完全正确,您需要为任何写入操作提供完整的 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
指令,那么您做错了。
我正在尝试在重置为 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 命令的更多详细说明,请参阅 documentation。
如果您真的想为某些列指定默认值 - 为什么不简单地用 .get('column', 'default-value')
之类的东西来处理它?
Alex 完全正确,您需要为任何写入操作提供完整的 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
指令,那么您做错了。