使用准备好的语句时,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 集作为参数。
当我想使用 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 集作为参数。