GQL: ID Spalte ansprechen



  • Guten Tag.
    Ich versuche gerade mein geschriebenes Script in die Google App Engine einzupflegen.
    Deshalb muss ich von SQL auf GQL wechseln. Meine ersten Versuche klappen soweit auch ganz gut.

    Ich hab mal folgende Class / DB angelegt:

    class board_topic_entry(db.Model):
        title = db.StringProperty(required=True)
        name = db.StringProperty(required=True)
        message = db.TextProperty()
    

    Das Eintragen & Auslesen klappt auch super.
    Dann hab ich mir mal die Testeinträge im Datastore-Viewer angeguckt und habe gesehen, dass er mir meine drei Spalten (title, name, message) angelegt hat und noch zwei Spalten automatisch mit hinzugefügt hat: ID und Key

    In der Spalte ID wird wie bei SQL einfach immer eine laufende ID vergeben.

    Und genau darüber, wollte ich auch wieder gezielt löschen, also:

    #...
        q = db.GqlQuery("SELECT __key__ FROM board_topic_entry WHERE ID=20")
        results = q.fetch(10)
        db.delete(results)
        return 'gelöscht'
    

    Das funktioniert leider so nicht. (Hab die 20 mal nur so aus Test eingeben, aber es existiert ein Eintrag mit der ID 20)
    Wenn ich nun aber z.B.

    #...
        q = db.GqlQuery("SELECT __key__ FROM board_topic_entry WHERE title='test123'")
        results = q.fetch(10)
        db.delete(results)
        return 'gelöscht'
    

    ausführe, klappt das.Also dann löscht er mir alle Einträge mit dem Titel "test123".
    Aber wieso kann ich die ID-Spalte im Query-Befehl nicht ansprechen?

    Beim Auslesen ist es mir schon übern Weg gelaufen, da konnte ich es auch nicht einfach mit "result.ID" (sowie bei den anderen: result.name, result.title etc.) aufrufen sondern musste es über "result.key().id()" machen.

    Ich vermute fast, dass es irgendwie daran liegt, dass ich die Spalte nicht explizit in der Class deklariert habe ?!
    Auf der anderen Seite denke ich mir, dass diese Spalte ja existiert und ich sie trotzdem ansprechen muss.

    Bin für jeden Tipp dankbar. 😉


Anmelden zum Antworten