Si devuelvo un cursor desdeunafunción automáticamente se me cierra el cursor

Manel manelelena en manelelena.com
Lun Oct 18 15:02:43 CEST 2004


Gracias por la aportación, pero para mi es imprescondible poder tener un grupo 
de cursores abiertos contra diferentes tipos de bases de datos e ir lanzado 
sentencias sin tener que ir abriendo cursores cada vez.

Al final he consegido con "pg" el objetivo que buscaba:

def st_connect():
 import pg
 st_db = pg.connect(dbname=st_db, user=st_user, host=st_host)
 return st_db

cursor=st_connect()
cursor.query("select 1")

Saludos, Manel.


El Lunes, 18 de Octubre de 2004 09:55, rosendo escribió:
> La verdad es que tendría más sentido que compartieses la conexión en vex de
> los cursores.
> En cualquier caso, debe ser una limitación o bein de la librería o bien de
> la base de datos, no sé.
> Otro acercamiento al problema aunque no se si te servirá seria haciendo:
>
> Def GetConnection():
>  import psycopg
>       db = psycopg.connect(host="bichejo", user="mcebolla", database="uoc")
>  return db
>
> def func():
>  db = GetConnection()
>  cr = db.cursor()
>  etc.....
>  cr.close()
>
> Creo que queda más claro que así compartes conexión y no compartes
> cursores, que es un poco lioso.
>
> Un  saludo.
> Rosendo.
> PD:Este código está sinprobar para psycopg, con cx_oracle si funciona.
> Espero que te ayude.
>
>
> -----Mensaje original-----
> De: python-es-bounces en aditel.org [mailto:python-es-bounces en aditel.org] En
> nombre de Manel i Elena
> Enviado el: viernes, 15 de octubre de 2004 23:38
> Para: La lista de python en castellano
> Asunto: Re: [Python-es] Si devuelvo un cursor desdeunafunción
> automáticamente se me cierra el cursor
>
> Gracias por la idea Rosendo, lo he probado pero sigue pasando lo mismo:
>
> Python 2.3.4 (#2, Sep 24 2004, 08:39:09)
> [GCC 3.3.4 (Debian 1:3.3.4-12)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> def func():
>
> ...     import psycopg
> ...     db = psycopg.connect(host="bichejo", user="mcebolla",
> database="uoc")
> ...     cursor = db.cursor()
> ...     return cursor
> ...
>
> >>> c=func()
> >>> c.execute("select 1")
>
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> psycopg.InterfaceError: already closed
>
>
> y con pypgsql  también... estoy intrigado, no sé si esto es normal o una
> limitación de estas librerías.
>
> Saludos, Manel.
>
> El Viernes, 15 de Octubre de 2004 18:18, rosendo escribió:
> > No conozco psycopg, pero imagino que será esto:
> > def func():
> >  import psycopg
> >  db = psycopg.connect(host="bichejo", user="mcebolla", database="uoc")
> >  cursor = db.cursor()
> >  return cursor
> >
> > Pruebalo y me cuentas
> > Un saludo.
> > Rosendo.
> >
> >
> > -----Mensaje original-----
> > De: python-es-bounces en aditel.org [mailto:python-es-bounces en aditel.org] En
> > nombre de Manel i Elena
> > Enviado el: viernes, 15 de octubre de 2004 17:09
> > Para: python-es en aditel.org
> > Asunto: [Python-es] Si devuelvo un cursor desde unafunción
> > automáticamente se me cierra el cursor
> >
> > Si ejecuto el siguiente código
> >
> > """
> > import psycopg
> > db = psycopg.connect(host="bichejo", user="mcebolla", database="uoc")
> > cursor=db.cursor()
> > cursor.executes("select 1")
> > """
> >
> > Tod funciona perfectamente pero si hago esto:
> >
> > """
> > def func():
> >  import psycopg
> >  db = psycopg.connect(host="bichejo", user="mcebolla", database="uoc")
> >  return db.cursor()
> >
> > cursor=func()
> > cursor.executes("select 1")
> > """
> >
> > Entonces me sale el siguiente mensaje de error
> >
> > """
> >   File "<stdin>", line 1, in ?
> > psycopg.InterfaceError: already closed
> > """
> >
> > ¿ No se puede devolver un cursor mediante una función ?, si hago esto
>
> mismo
>
> > con MySQLdb todo va bien.
> >
> > Por cierto, he probado exactamente lo mismo con pypgsql  y me pasa lo
> > mismo.
> >
> > ¿ Alguna idea ?.
> >
> > Manel.
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org
> > http://listas.aditel.org/listinfo/python-es

-- 
Visita nuestra pagina:

http://www.manelelena.com




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