ModelDefinitionException («Требуется как минимум 1 первичный ключ.»), Даже если первичный ключ уже определен - PullRequest
1 голос
/ 06 июля 2019

Я использую Cqlalchemy для взаимодействия с Cassandra db с помощью Python. При запуске приложения я сталкиваюсь с ошибкой

raise ModelDefinitionException("At least 1 primary key is required.")
cassandra.cqlengine.models.ModelDefinitionException: At least 1 primary key is required.

Модели выглядят так:

class Model1(db.Model):
    id = db.columns.UUID(primary_key=True, default=uuid.uuid4),
    type = db.columns.Text(required=False)
    user_id = db.columns.UUID(primary_key=True, default=uuid.uuid4)

Где db = CQLAlchemy()

Кассандра столовая DDL составляет:

CREATE TABLE keyspace1.model1 (
    id uuid,
    user_id uuid,
    type text,
    PRIMARY KEY (id, user_id)
)

EDIT: Я пошел отлаживать его на уровне файла cqlengine / models.py. Я заметил, что все столбцы были захвачены как экземпляр tuple

 'id': (<cqlengine.columns.UUID object at 0x7f86b2c7c940>,), 'user_id': (<cqlengine.columns.UUID object at 0x7f86b2c7c9b0>,)

И cqlengine отфильтровывает ключи от ключа attrs, проверяя, является ли его тип columns.Column.

column_definitions = [(k, v) for k, v in attrs.items() if isinstance(v, columns.Column)]

Ссылка Github для cqlengine / models.py

Вот почему он фактически не может получить ни одного столбца и, следовательно, говорит, что первичный ключ не определен.

Есть идеи, почему столбцы выбираются как тип кортежа, а не как столбцы. Колонка?

Спасибо

...