Preparing Cassandra SELECT Statements in Python -


i'm trying run prepared select queries against cassandra table.

the table defined such:

class emailaddresslookup(model, modeloperations, jsonserializer):     __table_name__ = 'email_address_lookup'      email_address = columns.text(primary_key=true)     user_id = columns.integer(primary_key=true) 

my insert works great. looks this:

i_email_lookup = session.prepare("""insert email_address_lookup (user_id, email_address) values (?, ?)""")  session.execute(i_email_lookup, (user_id, email_address)) 

however, select not working. looks this:

s_email_lookup_by_email = session.prepare('select user_id email_address_lookup "email_address"=?')  session.execute(s_email_lookup_by_email, email_address) 

here's traceback when email_address 27-char string:

traceback (most recent call last):   file "/home/thisguy/documents/my_proj/api/models/case.py", line 428, in _lookup_usin_email     matches = my_projcluster.select_email_lookup_by_email(self.email)   file "/home/thisguy/documents/my_proj/api/utils/decorators.py", line 14, in newfunc     result = func(*args, **kwargs)   file "/home/thisguy/documents/my_proj/api/models/my_projcluster.py", line 203, in select_email_lookup_by_email     session.execute(s_email_lookup_by_email, (email_address))   file "/home/thisguy/.envs/my_proj/lib/python3.4/site-packages/cassandra/cluster.py", line 1403, in execute     future = self.execute_async(query, parameters, trace)   file "/home/thisguy/.envs/my_proj/lib/python3.4/site-packages/cassandra/cluster.py", line 1452, in execute_async     future = self._create_response_future(query, parameters, trace)   file "/home/thisguy/.envs/my_proj/lib/python3.4/site-packages/cassandra/cluster.py", line 1464, in _create_response_future     query = query.bind(parameters)   file "/home/thisguy/.envs/my_proj/lib/python3.4/site-packages/cassandra/query.py", line 390, in bind     return boundstatement(self).bind(values)   file "/home/thisguy/.envs/my_proj/lib/python3.4/site-packages/cassandra/query.py", line 486, in bind     (len(values), len(col_meta))) valueerror: many arguments provided bind() (got 27, expected 1) 

okay, python tried turn 27-char string 27 args? let's wrap in tuple:

session.execute(s_email_lookup_by_email, (email_address, )) 

this prevents traceback, query returns none when data base has matching email address in it.

this:

session.execute(s_email_lookup_by_email, (email_address)) 

doesn't pass 1-tuple execute method.

in python, create 1-tuple need follow first element comma:

session.execute(s_email_lookup_by_email, (email_address,)) 

otherwise parentheses interpreted grouping operators , makes (email_address) equivalent email_address without parentheses.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

php - Find a regex to take part of Email -

javascript - Function overwritting -