Friday, April 13, 2012

Veri Islemek - plpython

Python kayitli islemler ile veri islemenin ornegi
CREATE or REPLACE FUNCTION test ()
RETURNS text
AS $$
import sys
class WritableObject:
def __init__(self):
self.content = ''
def write(self, string):
self.content = self.content + string + "\n"
outbuffer = WritableObject()
rv = plpy.execute("select a from TABLO");
for y in rv:
outbuffer.write(y['a'])
return outbuffer.content
$$ LANGUAGE plpythonu;

select * from test()
Sondaki select islemi bu sql dosyasini her islettigimizde hem kodun degismesi hem de test edilmesi icin eklendi. Sonuc ortami icin bu select ifadesi cikartilmali.

Kodun yaptigi bir sorgu isletip sonucu kayitli islemden dondurmek, ve SELECT uzerinden bu sonucun ekrana basilmasidir.

Baska bir ornek, plpython kodu icinden SELECT'vari kolon bazli satirlar dondurmek. Bunun icin once bir "tip" yaratilmasi gerekli, daha sonra bu tip uzerinden hafizada bir Python listesi olarak olusturulan sonuclar geriye dondurulebiliyor. Bu sonuc cagri yapan tarafa aynen bir SELECT ciktisi gibi gozukuyor.
CREATE TYPE kayit_tipi AS (
how text,
who text
);

CREATE or replace FUNCTION veri_getir()
RETURNS SETOF kayit_tipi
AS $$
return ( [ "xxx", "World" ], [ "yyy", "PostgreSQL" ], [ "zzz", "PL/Python" ] )
$$ LANGUAGE plpythonu;

select * from veri_getir();
Ayni kodun yield kullanan sekli
CREATE TYPE bizim_tip AS (
how text,
who text
);

CREATE or replace FUNCTION veri_getir ()
RETURNS SETOF greeting
AS $$
for val in [ "World", "PostgreSQL", "PL/Python" ]:
yield ( val, val )
$$ LANGUAGE plpythonu;

select * from veri_getir();

No comments: