Невозможно создать более двух таблиц с помощью sync_table() в cqlengine

У меня есть следующий класс в python, и я использую cqlengine в качестве сопоставителя объектов для cassandra DB,

class Company(Model):
    id = columns.Integer(index=True, primary_key=True)
    company_name = columns.Text(required=False)
    created_at = columns.DateTime(default=datetime.now)

class Social(Model):
    id = columns.Integer(index=True, primary_key=True)
    name = columns.Text(required=False)

class UserCompany(Model):
    id = columns.Integer(index=True, primary_key=True)
    user_id = columns.Integer(required=True)
    company_id = columns.Integer(required=True)

array_of_tables=[UserCompany, Company, Social]
    for table in array_of_tables:
        sync_table(table)

Проблема: я не могу создать более двух таблиц в cassandra при выполнении кода.

Сообщение об ошибке:

  File "test.py", line 109, in <module>
    create_tables()
  File "test.py", line 68, in create_tables
    sync_table(table)
  File "/usr/lib64/python2.6/site-packages/cassandra/cqlengine/management.py", line 259, in sync_table
    execute(qs)
  File "/usr/lib64/python2.6/site-packages/cassandra/cqlengine/connection.py", line 171, in execute
    result = session.execute(query, params, timeout=timeout)
  File "cassandra/cluster.py", line 1602, in cassandra.cluster.Session.execute (cassandra/cluster.c:27334)
  File "cassandra/cluster.py", line 3347, in cassandra.cluster.ResponseFuture.result (cassandra/cluster.c:65206)
cassandra.InvalidRequest: code=2200 [Invalid query] message="Cannot create secondary index on partition key column id"

Нужна ваша помощь в решении этого вопроса.


person user4130072    schedule 25.09.2015    source источник


Ответы (1)


Установка индекса для основного столбца не допускается. Я просто удалил это из кода, и это сработало. Это должно выглядеть так, как показано ниже. Здесь я просто использовал UUID вместо целого числа, но это в любом случае не имеет отношения к реальной проблеме.

class Company(Model):
    id = columns.UUID(default=uuid.uuid1(), primary_key=True))
    company_name = columns.Text(required=False)
    created_at = columns.DateTime(default=datetime.now)

class Social(Model):
    id = columns.UUID(default=uuid.uuid1(), primary_key=True)
    name = columns.Text(required=False)

class UserCompany(Model):
    id = columns.UUID(default=uuid.uuid1(), primary_key=True)
    user_id = columns.Integer(required=True)
    company_id = columns.Integer(required=True)

array_of_tables=[UserCompany, Company, Social]
    for table in array_of_tables:
        sync_table(table)
person user4130072    schedule 05.11.2015