これが私の列ファミリーの定義です:
CREATE TABLE columnfamily (column1 int PRIMARY KEY, column2 text);
CQL 3構文を使用して、python cassandra-dbapi2 1.4.0を使用してCassandra 1.1.6に接続しています。次のクエリでクエリ置換を使用したいのですが、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 (...,...) ステートメント内でクエリ置換を行う正しい方法を知っている人はいますか?
ありがとう!