gpt4 book ai didi

"select * from CF where column in (..,..,..)"的 python CQL 查询替换

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:15 24 4
gpt4 key购买 nike

这是我的列族定义:

CREATE TABLE columnfamily (column1 int PRIMARY KEY, column2 text);

我正在使用 python cassandra-dbapi2 1.4.0 连接到 Cassandra 1.1.6,使用 CQL 3 语法。我想在以下查询中使用查询替换,但它似乎无法在 WHERE...IN (...,...):

cql = "SELECT * FROM columnfamily WHERE column1 IN (:x) and column2 = :y;"
q = cursor.prepare_query(cql)

cursor.execute_prepared(q, {'x':(1,2,3), 'y':'abc'}

尝试上述操作后出现以下错误:

Traceback (most recent call last):
File "test_cassandra.py", line 17, in <module>
cursor.execute_prepared(q, params)
File "/usr/local/lib/python2.7/dist-packages/cql/cursor.py", line 89, in execute_prepared
response = self.get_response_prepared(prepared_query, params, cl)
File "/usr/local/lib/python2.7/dist-packages/cql/thrifteries.py", line 83, in get_response_prepared
paramvals = prepared_query.encode_params(params)
File "/usr/local/lib/python2.7/dist-packages/cql/query.py", line 60, in encode_params
return [t.to_binary(t.validate(params[n])) for (n, t) in zip(self.paramnames, self.vartypes)]
File "/usr/local/lib/python2.7/dist-packages/cql/cqltypes.py", line 225, in to_binary
return cls.serialize(val)
struct.error: cannot convert argument to integer

我还尝试使用以下内容:

cursor.execute_prepared(q, {'x':','.join([str(i) for i in (1,2,3)]), 'y':'abc'}

同样的错误发生了。有谁知道在 WHERE ... IN (...,...) 语句中进行查询替换的正确方法是什么?

谢谢!

最佳答案

Cassandra 是在准备好的查询上插入绑定(bind)值的部分,在这里,它不支持绑定(bind)值序列,所以答案很简单,“你还不能那样做”。

参见 https://issues.apache.org/jira/browse/CASSANDRA-4210如果你想关注那里的情况。

可以在纯 execute() 调用中的 python-cql 驱动程序中支持这种结构,其中查询插值是在 Python 上完成的一边,但你不会得到准备好的查询的任何好处,它不会比

cursor.execute('SELECT * FROM a WHERE b IN (%s)'
% ', '.join(map(cql.query.cql_quote, your_list_of_values)))

关于 "select * from CF where column in (..,..,..)"的 python CQL 查询替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13620243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com