SOLUCIONADO Como retornar uno o un set de registros desde una funcion plpython

FERNANDO VILLARROEL fvillarroel en yahoo.com
Lun Abr 3 21:02:33 CEST 2006


Hola Chema gracias, ya consegui retornar registros
desde plpython, te los pego.

El primero es uno que encontre Googleando y el segundo
una adaptacion mia, hazme saber tus comentarios sobre
los mismos.

******** primero ******************
create or replace function rut(int8) returns text as '

rut=args[0]

plan = plpy.prepare("SELECT nombre FROM uno WHERE rut
= $1", [ "int8" 
])


rv = plpy.execute(plan, [ rut  ])

return "\\n".join([ ln["nombre"] for ln in rv ])

'
LANGUAGE 'plpythonu';

************ segundo *************

create or replace function cli() returns text as '


plan = plpy.prepare("SELECT rut ,nombre  FROM uno ")

rv = plpy.execute(plan)

b = []

for i in range(len(rv)):

	a=rv[i]
	b.append([a["rut"],a["nombre"]])

return b

'
LANGUAGE 'plpythonu';


Ok Chema agradecere tus comentarios.

Fernando Villarroel

--- Chema Cortes <pych3m4 en gmail.com> wrote:

> On 4/2/06, FERNANDO VILLARROEL
> <fvillarroel en yahoo.com> wrote:
> > Hola estuve probando sobre como retornar registros
> > desde una funcion plpython, en particualar la
> > siguiente;
> >
> > create or replace function rut(int8) returns text
> as '
> >
> > rut=args[0]
> >
> > plan = plpy.prepare("SELECT nombre FROM uno WHERE
> rut
> > = $1", [ "int8" ])
> >
> >
> > rv = plpy.execute(plan, [ rut  ])
> >
> > return rv
> > '
> > LANGUAGE 'plpythonu';
> >
> > He visto aunque nunca he hecho una, que en las
> > funciones pl/pgsql se debe declarar una variable
> de
> > tipo record y que luego esta variable es la que se
> > retorna, algo asi
> >
> > create function retornar(int4) returns record as '
> >
> > declare reg as record
> >
> > .....
> > return reg
> > '
> > language pl/pgsql;
> >
> > Pero con plpython no se como retornar, aunque ya
> > retorne con el ejemplo anterior un dato de tipo
> > instancia.
> 
> El tipo "record" esta pensando para pl/pgsql, no
> para pl/pythonu. En
> python es algo más complejo. Tienes que crear una
> función que devuelva
> un SETOF, guardando la lista/generador en una
> variable global. El
> intérprete de SQL llamará a la función una vez por
> registro que tenga
> que mostrar, terminando cuando la función devuelva
> None (o se halla
> llegado al límite si tenía alguno).
> 
> Como inspiración, mírate esta receta mía:
> 
> http://www.pythonhispano.org/node/1010
> 
> Si no te sale, podría intentar darte un ejemplo más
> completo.
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 




Más información sobre la lista de distribución Python-es