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