如何为卡桑德拉创建只读模型
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__
属性,但在这种情况下,我无法调用 filter
或 get
调用模型。
没有执行此操作的内置方法。您可以通过定义中间 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
我有卡桑德拉模型
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__
属性,但在这种情况下,我无法调用 filter
或 get
调用模型。
没有执行此操作的内置方法。您可以通过定义中间 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