11 mai 2012

Google Application Engine si GQL

Google Application Engine este o platforma pentru deployment-ul unor aplicatii web scrise in mai multe limbaje de programare (gen JSP, Python, Ruby). Este usor de instalat, de rulat, e gratuit in limita a 1GB de date, ofera acces la un Datastore, iar pentru Python ofera un framework numit webapp care usureaza construirea aplicatiilor. (descrierea nu se opreste aici)

GQL - este un limbaj asemanator SQL folosit in GAE care insa suporta un singur tip de query : "select [parametri]" - acesta returneaza o liste de obiecte de tipul tabelului considerat. GQL nu este o baza de date relationala, adica nu suporta JOIN-uri, interogarea a mai mult de un tabel/query, iar in campul where din select se poate pune o singura coloana (din motive de rapiditate). In schimb, coloanele nu sunt fixate: pot exista oricate si chiar pot fi schimbate de-a lungul programului.

De exemplu: pentru definirea unui tabel in Datastore mai intai se construieste o clasa al carei nume va fi numele tabelului, cu variabile reprezentand campurile acestuia si tipurile lor.
from google.appengine.ext import db
class User (db.Model):
    username = db.StringProperty (required = True)
    password = db.StringProperty (required = True)
    email = db.StringProperty (required = False)
Crearea clasei User este echivalenta cu crearea tabelului in baza de date (acest lucru este specificat de db.Model care reprezinta clasa mostenita).
Oriunde in program, se poate crea acum un obiect de tip User pe care sa il inseram in baza de date:
u = User(username = "boom", password = "ble", email = "bee@gmail.com")
u.put()
Tabelul User, la fel ca orice tabel din GQL, contine un camp suplimentar numit id ca o cheie primara, generat automat. Daca vrem sa aflam id-ul inregistrarii ce tocmai am inserat-o, se foloseste:
id = u.key().id()
Consultarea tabelului User se poate realiza foarte simplu:
entries=db.GqlQuery("select * from User")
for entry in entries:
    self.response.out.write(entry.username + " " + entry.email)
"entries" furnizat este o lista de obiecte de tip User, si campurile fiecarui User se acceseaza cu "."
Pentru stergerea unei inregistrari se poate folosi:
db.delete(entry)
, unde entry este un element din entries (lista returnata de select).

Niciun comentariu: