python
  • model
  • cassandra
  • readonly
  • 2016-07-12 29 views 1 likes 
    1

    I cassandra Modellwie lesen für nur Modell cassandra erstellen

    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) 
    

    In meinem Fall Tabelle students bereits existiert haben, und ich will immer für select Abfrage dieses Modul verwenden.

    Ich versuchte __abstract__ Attribut, aber in diesem Fall kann ich filter oder get Anruf für Modell nicht anrufen.

    +0

    Haben Sie herausgefunden, wie das geht? –

    +0

    @RohanMonga noch nicht :( – Nilesh

    +0

    @RohanMonga haben Sie eine Idee, dies zu tun? – Nilesh

    Antwort

    1

    Es gibt keine integrierte Möglichkeit, dies zu tun. Sie könnten Verhalten wie das erhalten, indem eine Zwischenklasse zu definieren und die Mutationsverfahren überschreiben *:

    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 
    

    * beachten Sie, dass diese Lösung nur ein Teil - Sie müssen auch ROModel.__queryset__ mit einem ähnlich spezialisierten query.ModelQuerySet aktualisieren.

    Allerdings habe ich Probleme zu verstehen, was dies Ihnen kauft. Jede Lösung, die das Objekt schreibgeschützt macht, führt zu einem Laufzeitfehler, wenn Sie eine Mutationsmethode aufrufen.

    In jedem Fall sollten Sie auch besser mit auth und einem Benutzer/einer Rolle mit nur ausgewählten Berechtigungen arbeiten. https://cassandra.apache.org/doc/latest/cql/security.html#data-control

     Verwandte Themen

    • Keine verwandten Themen^_^