Вставить в кассандру из python с помощью cql

Я планирую вставить данные ниже CF с составными ключами.

CREATE TABLE event_attend (
    event_id int,
    event_type varchar,
    event_user_id int,
    PRIMARY KEY (event_id, event_type)    #compound keys...
);

Но я не могу вставить данные в этот CF из python с помощью cql. (http://code.google.com/a/apache-extras.org/p/cassandra-dbapi2/)

import cql
connection = cql.connect(host, port, keyspace)
cursor = connection.cursor()
cursor.execute("INSERT INTO event_attend (event_id, event_type, event_user_id) VALUES (1, 'test', 2)", dict({}) )

Я получаю следующую трассировку:

Traceback (most recent call last):
File "./v2_initial.py", line 153, in <module>
  db2cass.execute()
File "./v2_initial.py", line 134, in execute
  cscursor.execute("insert into event_attend (event_id, event_type, event_user_id ) values (1, 'test', 2)", dict({}))
File "/usr/local/pythonbrew/pythons/Python-2.7.2/lib/python2.7/site-packages/cql-1.4.0-py2.7.egg/cql/cursor.py", line 80, in execute
  response = self.get_response(prepared_q, cl)
File "/usr/local/pythonbrew/pythons/Python-2.7.2/lib/python2.7/site-packages/cql-1.4.0-py2.7.egg/cql/thrifteries.py", line 80, in get_response
  return self.handle_cql_execution_errors(doquery, compressed_q, compress)
File "/usr/local/pythonbrew/pythons/Python-2.7.2/lib/python2.7/site-packages/cql-1.4.0-py2.7.egg/cql/thrifteries.py", line 98, in handle_cql_execution_errors
  raise cql.ProgrammingError("Bad Request: %s" % ire.why)
cql.apivalues.ProgrammingError: Bad Request: unable to make int from 'event_user_id'

Что я делаю неправильно?


person tuelabel    schedule 04.11.2012    source источник


Ответы (2)


Похоже, вы пытаетесь следовать примеру из: http://pypi.python.org/pypi/cql/1.4.0

import cql
con = cql.connect(host, port, keyspace)
cursor = con.cursor()
cursor.execute("CQL QUERY", dict(kw='Foo', kw2='Bar', kwn='etc...'))

Однако, если вам нужно вставить только одну строку (как в вашем вопросе), просто удалите пустой параметр dict ().

Кроме того, поскольку вы используете составные ключи, убедитесь, что вы используете CQL3 http://www.datastax.com/dev/blog/whats-new-in-cql-3-0

connection = cql.connect('localhost:9160', cql_version='3.0.0')

Следующий код должен работать (при необходимости просто адаптируйте его для localhost):

import cql
con = cql.connect('172.24.24.24', 9160,  keyspace, cql_version='3.0.0')
print ("Connected!")
cursor = con.cursor()
CQLString = "INSERT INTO event_attend (event_id, event_type, event_user_id) VALUES (131, 'Party', 3156);"
cursor.execute(CQLString)
person Oren    schedule 04.11.2012
comment
Спасибо, Орен. Я попытался отредактировать свой код и выполнить, так что это сработало! - person tuelabel; 06.11.2012
comment
есть ли способ массовой загрузки данных, используя то же самое? - person Sociopath; 05.03.2018

Для python 2.7, 3.3, 3.4, 3.5 и 3.6 для установки вы можете использовать

     $ pip install cassandra-driver

И в питоне:

     import cassandra

Документацию можно найти в разделе https://datastax.github.io/python-driver/getting_started.html#passing-parameters-to-cql-queries

person B.abba    schedule 06.12.2018
comment
Извините, но ваш ответ не отвечает на вопрос - person Alex Ott; 07.12.2018