使用准备好的语句时,Cassandra 中的 python 驱动程序出现问题

Problem with python driver in Cassandra when use prepared statements

当我想使用 python 代码更新 Cassandra table 中的设置项时

ps = session.prepare( """ UPDATE test,tbl SET val = val + {'?'} where name = ? and id = ?;""" )
bs = bind(ps, ['name', 'name', 1])
session.execute(bs)

我收到错误

Too many arguments provided to bind() (got 3, expected 2)

问题是{'?'}准备好的无法识别。我测试了 {\'?\'} 但没有任何变化。

更新:忘了那个语法...

您需要使用以下语法:

UPDATE test,tbl SET val = val + ? where name = ? and id = ?;

并使用 set 作为第一个参数进行绑定:

bs = bind(ps, [set(['name']), 'name', 1])

原回答:

您不需要在 ? 字符周围加上引号 - 当绑定发生时,它会正确地引用文本和其他类型。

P.S。请注意,如果您使用 {?},这意味着您总是向集合中插入一个元素。如果您需要更多,那么您只需要使用 ?,并传递一个 python 集作为参数。