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

Chema Cortes pych3m4 en gmail.com
Lun Abr 3 15:59:24 CEST 2006


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.




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