如何为卡桑德拉创建只读模型

how to create read only model for cassandra

我有卡桑德拉模型

from cassandra.cqlengine import columns
from cassandra.cqlengine.models import Model

class StudentModules(Model):
    """Model for Student get."""

    __table_name__ = 'students'
    student_id = columns.UUID(primary_key=True, default=uuid4)
    student_name = columns.Text(index=True)

在我的例子中,table students 已经存在,我一直想使用这个模块进行 select 查询。

我尝试了 __abstract__ 属性,但在这种情况下,我无法调用 filterget 调用模型。

没有执行此操作的内置方法。您可以通过定义中间 class 并覆盖突变方法*:

来获得类似的行为
class ROModel(Model):
    __abstract__=True

    @classmethod
    def create(cls, **_):
        raise NotImplementedError()

    def save(self):
        raise NotImplementedError()

    def update(self, **_):
        raise NotImplementedError()

    def delete(self):
        raise NotImplementedError()

class Test(ROModel):
    __keyspace__='test'
    k = columns.Integer(primary_key=True)
    a = columns.Integer()
    b = columns.Integer()

print Test.objects.first()
Test(k=1, b=4).update()  # NotImplementedError
Test.create(k=1, a=2, b=3)  # NotImplementedError
Test(k=1).delete()  # NotImplementedError
Test(k=1, a=3).save()  # NotImplementedError

* 请注意,这只是部分解决方案——您还需要使用类似的专业化 query.ModelQuerySet.

更新 ROModel.__queryset__

但是,我无法理解这会给您带来什么。如果您调用变异方法,任何将事物设置为只读的解决方案都将导致运行时错误。

无论如何,您最好还是使用 auth 和仅具有 select 权限的 user/role。 https://cassandra.apache.org/doc/latest/cql/security.html#data-control