Andrise programmeerimisalane WIKI

Kasutamine

Andmebaasiteenuse kasutamiseks tuleb laadida vastavast teegist andmebaasiobjekt db - selle objekti läbi saabki teha kõiki andmebaasi operatsioone.

from google.appengine.ext import db

Tabelite defineerimine

Järgmisena tuleks defineerida andmebaasitabelite mudelid. Mudelite defineerimine käib klasside loomise läbi. Klassi omadused saavadki seeläbi tabeli väljadeks. Kui PHP ja MySQL puhul ollakse harjunud selle jaoks kasutama mõnd tööriista nagu phpMyAdmin, siis Google App Engine puhul pole vaja nii sügavuti minnagi - piisab lihtsalt klassi defineerimisest ja kogu ülejäänud keerukuse teeb keegi kuskil mujal ära.

class Teade(db.Model):
  saatja = db.StringProperty()
  sisu = db.TextProperty()
  aeg = db.DateTimeProperty(auto_now_add = True)

Selliselt luuakse db.Model klassist pärinev andmebaasitabel nimega Teade millel on kolm välja - stringiväli saatja, tekstiväli sisu ja ajaväli aeg. auto_now_add parameeter aeg väljas tähendab, et uue kirje lisamisel seatakse selle välja väärtuseks automaatselt hetke aeg.

Juhul kui programmi uuema versiooniga andmebaasitabeli struktuur muutub, ei mõjuta see juba olemasolevaid andmeid ja nende struktuur jääb kuni ülesalvestamiseni samaks. Juhul kui näiteks programmi uuemas versioonis on tabelil Teade olemas ka väli saatja_email, siis olemasolevatele ridadele seda välja üldse ei tekigi ning kui uue välja puhul on tegu indeksiga, siis olemasolevaid elemente selle indeksi alusel otsidas ei saa. Juhul aga kui väli tabelist kustutatakse, siis loodavatel elementidel vastavat välja enam pole, aga olemasolevatel on see endiselt alles.

Seega Google App Engine andmebaas ei mitte Exceli laadne tabel nagu MySQL, kus kõik read on samasuguse struktuuriga, vaid rohkem tekstifaili moodi, kus igal real võib olla suvaline arv suvalise suurusega sõnu.

Andmete lisamine

Uute kirjete lisamine andmebaasi on mugav objektina andmebaasielemendi kujul. Selleks tuleb luua tabeli tüüpi objekt (näites Teade) ning määrata selle omaduste väärtused. Peale seda on võimalik kirje andmebaasi salvestada.

teade = Teade()
teade.saatja = "Peeter Meeter"
teade.sisu = "See on teade"
db.put(teade)

Sellise tegevuse peale lisatakse andmebaasi kirje

key key_name id saatja sisu aeg
Peeter Meeter See on teade 23.02.2010 17:59:00

Tabel 3. Loodud andmebaasi kirje

Andmete pärimine

Andmete pärimiseks on mitmeid viise, täpsemalt vaatame neid edaspidi, siin aga kõige lihtsamat viisi - ühe kirje lugemine andmebaasist selle võtme (key) alusel.

key = self.request.get('key')
teade = Teade.get(key)
self.response.out.write(u"Teade: %s. Saatis: %s" % (teade.sisu, teade.saatja))

Näites võetakse võtme väärtus GET parameetrist key (antud parameeter eksisteerib, kui päringu URL on kujul http://www.example.com/?key=ZZZZ - siinjuhul oleks key väärtuseks ZZZZ). key väärtuse tekstikujul, mida saaks sama moodi URL'i abil liigutada, saab peale kirje andmebaasi lisamist käsuga

key = str(teade.key())

Brauserile väljastatakse tekst:

Teade: See on teade. Saatis: Peeter Meeter

Google App Engine andmebaas võimaldab kasutada kolme tüüpi võtmeid, mille alusel päringuid teha. Nendest kaks on seatud andmebaasi enda poolt ja ühte saab seada programm.

  • key - tekstiline võti. Seatud igale kirjele andmebaasi poolt automaatselt ning on unikaalseks võtmeks terve andmebaasi raames. kirje = Tabel.get(key), väärtuse saab kätte järgnevalt key = kirje.key()
  • id - numbriline võti, mis on seatud andmebaasi poolt ja on unikaalne konkreetse tabeli raames. kirje = Tabel.get_by_id(id), väärtuse saab kätte järgnevalt: id = kirje.key().id()
  • key_name - tekstiline võtme nimi, mis on seatav programmi poolt ning on unikaalne tabeli raames. Juhul kui luuakse uus element, millel on sama key_name väärtus nagu mõnel olemasoleval kirjel, siis olemasolev kirje kirjutatakse üle. Elementi luues tuleb kasutada täiendavat parameetrit: kirje = Tabel(key_name='unikaalne_nimi') ning andmebaasist pärida saab sellist kirjet järgnevalt: kirje = Tabel.get_by_key_name('unikaalne_nimi')

Andmete kustutamine

Kirje kustutamiseks tuleb kõigepealt saada kätte kirje objekt, mida kustutada tahetakse. Seejärel saab rakendada objekti kustutamise meetod delete.

key = self.request.get('key')
teade = Teade.get(key)
teade.delete()

Peale selle koodi rakendumist kustutatakse kirje andmebaasist.