我有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)
就我而言,表students
已经存在,我总是希望将此模块用于select
查询。
我尝试了__abstract__
属性,但在这种情况下,我无法调用filter
或get
来调用模型。
答案 0 :(得分:1)
没有内置的方法可以做到这一点。你可以通过定义一个中间类并覆盖变异方法来获得这样的行为*:
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
*请注意,这只是部分解决方案 - 您还需要使用类似的专业ROModel.__queryset__
更新query.ModelQuerySet
。
然而,我无法理解这会给你带来什么。如果调用变异方法,任何使事物只读的解决方案都将导致运行时错误。
在任何情况下,您最好还使用auth和仅具有选择权限的用户/角色。 https://cassandra.apache.org/doc/latest/cql/security.html#data-control