ModelDefinitionException(“至少需要1个主键。”)即使已经定义了主键

时间:2019-07-06 19:47:55

标签: python cassandra cqlengine

我正在使用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>,)

然后cqlengine通过检查其类型是否为attrscolumns.Column密钥中过滤出密钥。

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

Github link for cqlengine/models.py

这就是为什么它实际上无法获取任何列并因此未定义主键的原因。

有什么主意为什么选择列为元组类型而不选择列为column.Column?

谢谢

0 个答案:

没有答案