Retornar registros plpython

FERNANDO VILLARROEL fvillarroel en yahoo.com
Mar Abr 11 17:59:00 CEST 2006


Ok gracias Chema ahy funciono, pero el resultado es un
string empaquedado en una Lista:

create or replace function cli2() returns setof text
as
'
plan = plpy.prepare("SELECT rut ,nombre  FROM persona
")

rv = plpy.execute(plan)

return [(r["rut"],r["nombre"]) for r in rv]

'
LANGUAGE 'plpythonu';

Hice el siguiente script para probar la funcion
cli2():

from pyPgSQL import PgSQL
cnx=PgSQL.connect(host='localhost',database='sigven',
user='prepagosip',password='4114callmetelFantacioso')
cursor=cnx.cursor()
q="select * from cli2()"
cursor.execute(q,)
res=cursor.fetchall()
print res #imprimo el resultado
print type(res) #El resultado es de tipo lista
res1=res[0]
#res=res1[0]
for i in range(len(res1)):
 print res1[i] #accedo a cada miembro de la lista (es
uno solo)
 print type(res1[i]) # Su tipo es str

Me arroja lo siguiente

prepagosip en desarrollo:~/plpython$ python recupera.py
[["[['', ''], ['8680284', 'Campos'], ['86116800',
'.']]"]]
<type 'list'>
[['', ''], ['8680284', 'Campos'], ['86116800', '.']]
<type 'str'>
prepagosip en desarrollo:~/plpython$

Yo hubiera deseado que lista empaquetara sublistas
para cada registros y asi obtener sus items.

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

> On 4/7/06, FERNANDO VILLARROEL
> <fvillarroel en yahoo.com> wrote:
> 
> > Hola probe con las siguientes funcionea segun lo
> que
> > me rocomendo Chema, pero la funcion se queda
> colgada y
> > no termina hasta que yo la
> > quiebre con un Ctrl C ;
> >
> > prueba=# drop function cli();
> > DROP FUNCTION
> > prueba=# \i ejem5.sql
> > CREATE FUNCTION
> > prueba=# select cli();
> > Cancel request sent
> > ERROR:  cancelando consulta debido a una petición
> del
> > usuario
> > prueba=#
> 
> Para funciones que retornan sets (SRFs), deberías
> invocarlas de esta forma:
> 
> select * from cli();
> 
> Una invocación directa (como UDF) parece que no sabe
> cuándo termina,
> por lo que puede ser necesario que indiques un
> límite; pero en mis
> pruebas, a veces funciona con límite y otras veces
> no.
> 
> 
> > He indagagado mas al respecto mas precisamente en
> la
> > lista de Postgresql y me han contestado que esto
> > (returns setof) no esta implementado en Postgres
> para
> > plpython, me recomiendan hecharle un vistazo a
> plperl,
> > pero no me interesa pues mi ambito es Python.
> 
> Es la conclusión que he sacado de mis pruebas.
> Siempre puedes parchear
> postgresql, con las dificultades que se pueden
> esperar.
> 
> > Existe algun truco para hacer esto, como por
> ejemplo
> > con los diccionarios SD y GD?
> 
> La opción más simple que se me ocurre es que la
> función python guarde
> el resultado en una tabla temporal y programar la
> función SRF en
> pl/pgsql para que extraiga esta tabla.
> _______________________________________________
> 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