1

我正在使用 Cqlalchemy 使用 Python 与 Cassandra db 进行交互。在运行应用程序时,我遇到了错误

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()

Cassandra 表 DDL 为:

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

编辑:我去 cqlengine/models.py 文件级别调试它。我注意到的是所有列都被捕获为tuple

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

并且 cqlengineattrs通过检查其类型是否为columns.Column.

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

cqlengine/models.py 的 Github 链接

这就是为什么它实际上无法获得任何列,因此说没有定义主键。

知道为什么将列选择为元组类型而不是 columns.Column 吗?

谢谢

4

0 回答 0