2015-01-28 5 views
1

파이썬 드라이버를 통해 카산드라 데이터베이스를 쿼리하는 동안 문제가 발생합니다.파이썬 드라이버 카산드라 쿼리 오류

def search_data(self, ticker): 
     row = self.session.execute("""select * from secmaster.ticker_name where ticker = %s""",(ticker)) 
     print row 

얻기 오류 : 내가 쿼리 아래한다면

File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1293, in execute 
    future = self.execute_async(query, parameters, trace) 
    File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1342, in execute_async 
    future = self._create_response_future(query, parameters, trace) 
    File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1373, in _create_response_future 
    query_string = bind_params(query_string, parameters, self.encoder) 
    File "/usr/local/lib/python2.7/dist-packages/cassandra/query.py", line 727, in bind_params 
    return query % tuple(encoder.cql_encode_all_types(v) for v in params) 
TypeError: not all arguments converted during string formatting 

하지만

작동합니까

내 카산드라 버전은 가 python2.7

>>> import cassandra 
>>> cassandra.__version__ 
'2.1.3' 
>>> 

내 코드는 ,515,

답변

-2

고정

행 self.session.execute = ("선택 * 티커는 '% S'= secmaster.ticker_name에서"% 시세)

+0

훨씬 더 효율적인 준비 문을 사용해야합니다. –

+2

문자열 대체로 데이터베이스 쿼리에 매개 변수 삽입하면 데이터베이스 주입 취약점이 발생합니다. – rakslice

2

Session.execute의 파라미터 parameters이 순서로 호출해야 (예 : tuple) 또는 dict입니다. 단 하나의 표현식을 괄호로 묶는 것만으로는 하나의 항목으로 된 튜플이되지 않습니다. 예를 들어, 후행 쉼표를 추가해야합니다. 예 :

def search_data(self, ticker): 
     row = self.session.execute("""select * from secmaster.ticker_name where ticker = %s""",(ticker,)) 
     print row