![](/img/trans.png)
[英]How to order a Queryset containing foreign key objects to a model by related model's primary_key
[英]Cassandra abstract model cant define primary_key with clustering order
我正在用python創建cassandra模型,下面是我的代碼
from uuid import uuid4
from uuid import uuid1
from cassandra.cqlengine import columns, connection
from cassandra.cqlengine.models import Model
from cassandra.cqlengine.management import sync_table
class BaseModel(Model):
__abstract__ = True
deleted = columns.Boolean(required=True, default=False)
created_timestamp = columns.TimeUUID(primary_key=True,
clustering_order='DESC',
default=uuid1)
class OtherModel(BaseModel):
__table_name__ = 'other_table'
id = columns.UUID(primary_key=True, default=uuid4)
if __name__ == '__main__':
connection.setup(hosts=['localhost'],
default_keyspace='test')
sync_table(OtherModel)
這給了錯誤
python /tmp/test.py
Traceback (most recent call last):
File "/tmp/test.py", line 9, in <module>
class BaseModel(Model):
File "/usr/lib/python2.7/site-packages/cassandra/cqlengine/models.py", line 905, in __new__
raise ModelException("clustering_order may be specified only for clustering primary keys")
cassandra.cqlengine.models.ModelException: clustering_order may be specified only for clustering primary keys
如果我在clusturing_order
發表評論,那么它可以正常工作。
class BaseModel(Model):
__abstract__ = True
deleted = columns.Boolean(required=True, default=False)
created_timestamp = columns.TimeUUID(primary_key=True,
# clustering_order='DESC',
default=uuid1)
有什么方法可以在abstract
類中定義clusting_order
嗎?
我必須在每個模型中創建created_timestamp
,因此無法將其移至每個模型。
Cassandra中的PRIMARY KEY有兩個組件:分區鍵和集群鍵。 分區鍵確定該行將存儲在集群中的哪個節點上。 聚集鍵確定分區鍵內的行的磁盤上的排序順序。
注意也很重要,但是不能訂購分區鍵。 多分區鍵結果始終按其哈希令牌值的順序返回。
看來您的基本模型只有一列( created_timestamp
)被定義為鍵,因此這就是您的分區鍵。 我沒有看到定義的另一個鍵,因此您沒有集群鍵,因此無法應用clustering_order
。
在Cassandra中,您需要根據要提供的查詢定義表。 沒有看到您的查詢,很難告訴您如何解決此問題。 但實際上,您需要使用其他分區鍵,並將created_timestamp
指定為集群鍵,以獲得所需的結果。
有關更多信息,您應該在這里閱讀Carlo的答案:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.