Andrise programmeerimisalane WIKI
Andmete päring baasist
Google App Engine andmebaas laseb päringuid läbi viia kahel viisil - päringuliidese abil ning SQL laadse GQL (Google Query Language) lausetega.
Päringuliides
Päringuliides võimaldab andmebaasiobjekti meetodite abil määrata millistele tingimustele päring vastama peab, - kuidas peab see olema sorteeritud ning mida objektiga edasi teha saab jne. Tegun on suuresti millegi Active record pattern laadsega, kus andmebaasiga saab suhelda ilma SQL lauseid kirjutamata.
query = Teade.all() query.filter("saatja =", "Peeter Meeter") query.order("-aeg") results = query.fetch(10) for result in results: print "Sõnum: " + result.sisu
Näites avatakse pärimiseks andmebaasitabel Teade, millest otsitakse kirjeid, kus saatja väärtuseks on Peeter Meeter. Tulemused sorteeritakse aja alusel, kus vanemad on eespool (-date) ning lõpuks laetakse andmebaasist vastavalt päringule 10 esimest tulemust, mille sisu väljastatakse ekraanile.
Filtreerimiseks saab kasutada järgmisi operaatoreid (näites oli kasutusel =)
| Operaator | Tähendus |
|---|---|
| > | väiksem kui |
| ⇐ | väiksem või võrdne kui |
| = | võrdne |
| > | suurem kui |
| >= | suurem või võrdne kui |
| != | pole võrdne |
| IN | võrdne ühega väärtustest List tüüpi väljas |
Operaatorit != saab tehnilistel põhjustel kasutada ainult ühe korra päringu kohta. Sellise päringu sooritamiseks viiakse tegelikult läbi kaks päringut - esimene juhul, kui tingimus on väiksem kui parameeter ning teine päringu tingimusel, kus väärtus on suurem kui parameeter ning nende päringute kokkuliitmisel saabki soovitud tulemuse.
GQL
Google Query Languane võimaldab luua SQL laadseid tekstilisi päringuid. GQL lausetega saab läbi viia ainult SELECT tüüpi päringuid ehk siis andmete pärimist andmebaasist. Kõikideks muudeks tegevusteks tuleb kasutada päringuliidese käsklusi. Seetõttu pole võimalik ka näiteks kustutada korraga mitut elementi - kõik elemendid tuleb kõigepealt andmebaasist pärida ja siis saab nendel rakendada ükshaaval päringumeetodit delete.
GQL lause struktuur on järgmine
SELECT [* | __key__] FROM <tabel> [WHERE <tingimus> [AND <tingimus> ...]] [ORDER BY <omadus> [ASC | DESC] [, <omadus> [ASC | DESC] ...]] [LIMIT [<alates>,]<arv>] [OFFSET <alates>]
Nagu näha, ei toeta GQL OR tingimusi - kasutada saab vaid tingimuste liitmist operaatoriga AND. Tingimused saavad kasutada samu operaatoreidki nagu päringuliidesegi puhul, sh. kehtib ka piirang, et mitte-võrduvat operaatorit != saab kasutada vaid ühe korra päringu kohta.
GQL lause saab käivitada funktsiooniga db.GqlQuery, ning selle tulemuseks on päringuliidese objekt sarnaselt päringuliidese kasutamisegagi. Funktsioonil on üks kohustuslik parameeter, milleks on GQL lause ning suvaline arv täiendavaid parameetreid, millega saab määrata päringulause elementide väärtusi. Nii ei ole vaja päringus kasutatavaid tingimusi kuidagi puhastada, seda teeb süsteem ise.
query = db.GqlQuery("SELECT * FROM Teade WHERE saatja = :1 ORDER BY aeg DESC", "Peeter Meeter") results = query.fetch(10) for result in results: print "Sõnum: " + result.sisu
GQL lauses tähistab :1 seega esimese lisaparameetri väärtust (näites Peeter Meeter), :2 teise lisaparameetri väärtust jne.
Käidud rada: • django_filtrid • bigtable_query