GQL: ID Spalte ansprechen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
powered_by_coffee
User
Beiträge: 22
Registriert: Freitag 13. August 2010, 14:25

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:

Code: Alles auswählen

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:

Code: Alles auswählen

#...
    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.

Code: Alles auswählen

#...
    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. ;)
Benutzeravatar
powered_by_coffee
User
Beiträge: 22
Registriert: Freitag 13. August 2010, 14:25

So für alle, die mal das selbe Problem haben.
Ich hab eine Lösung gefunden:

Code: Alles auswählen

q = db.GqlQuery("SELECT __key__ FROM board_topic_entry WHERE __key__ = Key('board_topic_entry',20)")
Mfg
Antworten