Documentazione di PostgreSQL 9.0 > Programmazione del server > PL/Python - linguaggio procedurale python > Accesso al database
PrecedenteFunzioni TriggerFunzioni di utilitàSuccessivo

42.7. Accesso al database

Il modulo del linguaggio PL/Python importa automaticamente un modulo Python chiamato plpy. Le funzioni e le costanti in questo modulo sono disponibili nel codice Python come plpy.foo.

Il modulo plpy fornisce due funzioni chiamate execute e prepare. Chiamare plpy.execute con una query e un argomento limit opzionale causa che quella query sia eseguita e il risultato restituito in un oggetto. L'oggetto risultante emula un oggetto list o dizionario. L'oggetto risultato può essere acceduto tramite il numero della riga e il nome della colonna. Sono disponibili questi metodi aggiuntivi: nrows che restituisce il numero di righe ritornate dalla query, e status che è il valore di ritorno di SPI_execute(). L'oggetto risultato può essere modificato.

Per esempio:

rv = plpy.execute("SELECT * FROM my_table", 5)

restituisce fino a 5 righe da my_table. Se my_table ha una colonna my_column, ci si accederebbe così:

foo = rv[i]["my_column"]

La seconda funzione, plpy.prepare, prepara il piano di esecuzione per una query. È chiamata con una query e l'elenco dei tipi del parametro, se si hanno riferimenti al parametro nella query. Per esempio:

plan = plpy.prepare("SELECT last_name FROM my_users WHERE first_name = $1", [ "text" ])

text è il tipo della variabile che si sta passando per $1. Dopo aver preparato un'istruzione, si usa la funzione plpy.execute per eseguirla:

rv = plpy.execute(plan, [ "name" ], 5)

Il terzo argomento è il limit ed è opzionale.

I parametri della query e i campi della riga risultante sono convertiti tra i tipi di dato PostgreSQL e Python come descritto in Sezione 42.3, «Valori dei dati». L'eccezione è che i tipi composti non sono attualmente supportati; Saranno rifiutati come parametri di query e sono convertiti in stringhe quando appaiono nel risultato di una query. Come workaround per l'ultimo problema, la query può a volte essere riscritta così che il tipo composto appare come una riga risultato piuttosto di un campo della riga risultato. Alternativamente, si potrebbe fare il parsing della stringa risultante a mano, ma questo approccio non è raccomandato dato che non è a prova di futuro.

Quando si prepara un piano usando il modulo PL/Python è automaticamente salvato. Leggere la documentazione SPI (Capitolo 43, Server Programming Interface) per una descrizione di cosa significa questo. Per usare efficacemente questo attraverso le chiamate di funzione si deve usare uno dei dizionari di immagazzinamento persistenti, SD o GD (si veda Sezione 42.4, «Sharing Data»). Per esempio:

CREATE FUNCTION usesavedplan() RETURNS trigger AS $$
    if SD.has_key("plan"):
        plan = SD["plan"]
    else:
        plan = plpy.prepare("SELECT 1")
        SD["plan"] = plan
    # rest of function
$$ LANGUAGE plpythonu;

Documentazione di PostgreSQL 9.0 > Programmazione del server > PL/Python - linguaggio procedurale python > Accesso al database
PrecedenteFunzioni TriggerFunzioni di utilitàSuccessivo