[Python-es] respuesta consulta python y sqlite

102 views
Skip to first unread message

Manuel Enrique González Ramírez

unread,
Jun 1, 2011, 4:19:52 PM6/1/11
to La lista de python en castellano
Saludos.

Se me presenta un situación en la empresa para la que trabajo que quiero solucionar con un script de Python acompañado de SQLite.  El asunto es que no tengo mucha experiencia con SQLite y al querer hacer un count de una tabla me arroja el resultado con el siguiente formato:

<sqlite3.Cursor object at 0x0126B4E0>

El fragmento de codigo que me genera el resultado es este:

c.execute('SELECT * FROM tabla')

for row in c:
    print row

Alguien me puede indicar como ver ese resultado en formato decimal??

La misma consulta la hago en el editor de sqlite (plugin de Mozilla) y me arroja el dato en el formato deseado; también me di una pasada por San Google pero no logro hallar documentación al respecto.


A todos muchas gracias

--
Manuel Enrique González Ramírez
http://maengora.blogspot.com

Carlos Herrera Polo

unread,
Jun 1, 2011, 4:25:59 PM6/1/11
to La lista de python en castellano
Si ejecutas dentro del for

Print type(c)

Que tipo de dato regresa ?


El 01/06/11, Manuel Enrique González Ramírez <maen...@gmail.com> escribió:

--
Enviado desde mi dispositivo móvil
_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Carlos Herrera Polo

unread,
Jun 1, 2011, 4:26:21 PM6/1/11
to La lista de python en castellano
Perdon quise escribir

Print type(row)


El 01/06/11, Carlos Herrera Polo <carlos.he...@gmail.com> escribió:

Kiko

unread,
Jun 1, 2011, 4:35:10 PM6/1/11
to La lista de python en castellano
El 1 de junio de 2011 22:19, Manuel Enrique González Ramírez <maen...@gmail.com> escribió:
Saludos.

Se me presenta un situación en la empresa para la que trabajo que quiero solucionar con un script de Python acompañado de SQLite.  El asunto es que no tengo mucha experiencia con SQLite y al querer hacer un count de una tabla me arroja el resultado con el siguiente formato:

<sqlite3.Cursor object at 0x0126B4E0>

El fragmento de codigo que me genera el resultado es este:

c.execute('SELECT * FROM tabla')

for row in c:
    print row

Prueba esto:
for row in c.execute('SELECT * FROM tabla'):
    print row

joe di castro

unread,
Jun 1, 2011, 5:22:46 PM6/1/11
to La lista de python en castellano
Es que eso solo ejecuta el SQL sobre el cursor, pero no devuelve los
resultados, para eso haz lo siguiente:

c.execute('SELECT * FROM tabla')

rows = c.fetchall() ## Para recoger todos los resultados

for row in rows:
print(row)

Y ya verías los resultados. Si quisieras recoger resultados
individualmente, emplea fetchone()

Saludos
Joe

El mié, 01-06-2011 a las 15:19 -0500, Manuel Enrique González Ramírez
escribió:

joe di castro

unread,
Jun 1, 2011, 5:25:10 PM6/1/11
to La lista de python en castellano
Por cierto la documentación que necesites sobre SQLite y sqlite3 la
tienes aquí:

http://docs.python.org/library/sqlite3.html#module-sqlite3
http://www.sqlite.org/

Saludos
Joe

El mié, 01-06-2011 a las 15:19 -0500, Manuel Enrique González Ramírez
escribió:

Manuel Enrique González Ramírez

unread,
Jun 1, 2011, 5:38:38 PM6/1/11
to La lista de python en castellano
Perdón a todos,

De los afanes me comí unas líneas de código (justos las del problema):

# Consultemos los datos
c.execute('SELECT * FROM tabla')

for row in c:
    print row

c.execute('select count(secuencia) from tabla')
print 'Total transacciones: ',c

joe di castro

unread,
Jun 1, 2011, 5:48:25 PM6/1/11
to La lista de python en castellano
El problema es el mismo, estas intentando imprimir directamente el
objeto cursor, por eso te aparece ese resultado:

<sqlite3.Cursor object at 0x0126B4E0>

Necesitas recoger los datos en una variable, bien empleado el metodo
fetchall() para recoger todos los resultados o bien fetchone() para ir
recogiendo uno a uno. Bueno, la verdad es que puedes emplear el cursor
como un iterable, por eso te deja hacer:

for row in c:
print row

pero cuando intentas hacer hacer el último print, no lo iteras, por lo
tanto te muestra el objeto.

Yo por eso te recomiendo emplear fetchone() y fetchall() siempre y así
te evitas estos problemas.

Saludos
Joe


El mié, 01-06-2011 a las 16:38 -0500, Manuel Enrique González Ramírez

gerardo Juarez

unread,
Jun 1, 2011, 6:02:57 PM6/1/11
to La lista de python en castellano
Manuel,

Ve lo que dice Joe. No he usado nunca SQLite, pero supongo que sigue la
DB-API 2.0 de Python. Si ese es el caso, 'c' en tu
código es un cursor y por lo tanto, como dice Joe, c.execute() ejecuta
nada más el *query* . Luego tienes que obtener los
datos con c.fetchall() o c.fetchone(). En el caso que pones en el que
obtienes un sólo número, pasa como en este ejemplo:

cur = db.cursor()
cur.execute('select count(*) from articulos') # cuantos registros
hay en esta tabla
row = cur.fetchone()
print row[0] # imprime cuantos registros obtuvo

Esto es, aún siendo count(*) lo que quieres, te va a regresar un arreglo
(o lista), por lo que lo recibes como tal y el número es
el primer y único elemento de la lista (o arreglo).

Lo que estás imprimiendo es el cursor mismo, por eso lo transforma a una
representación imprimible y obtienes:
<sqlite3.Cursor object at 0x0126B4E0>

Saludos
Gerardo

Manuel Enrique González Ramírez wrote:
> Perdón a todos,
>
> De los afanes me comí unas líneas de código (justos las del problema):
>
> # Consultemos los datos
> c.execute('SELECT * FROM tabla')
>
> for row in c:
> print row
>
> c.execute('select count(secuencia) from tabla')
> print 'Total transacciones: ',c
>
>
>
> El 1 de junio de 2011 16:25, joe di castro <enxe...@gmail.com

> <mailto:enxe...@gmail.com>> escribió:

> > Pyth...@python.org <mailto:Pyth...@python.org>


> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
>
>
> _______________________________________________
> Python-es mailing list

> Pyth...@python.org <mailto:Pyth...@python.org>

> ------------------------------------------------------------------------

Manuel Enrique González Ramírez

unread,
Jun 1, 2011, 6:04:08 PM6/1/11
to La lista de python en castellano
El 1 de junio de 2011 16:48, joe di castro <enxe...@gmail.com> escribió:
El problema es el mismo, estas intentando imprimir directamente el
objeto cursor, por eso te aparece ese resultado:

 <sqlite3.Cursor object at 0x0126B4E0>

Necesitas recoger los datos en una variable, bien empleado el metodo
fetchall() para recoger todos los resultados o bien fetchone() para ir
recogiendo uno a uno. Bueno, la verdad es que puedes emplear el cursor
como un iterable, por eso te deja hacer:

for row in c:
   print row

pero cuando intentas hacer hacer el último print, no lo iteras, por lo
tanto te muestra el objeto.

Yo por eso te recomiendo emplear fetchone() y fetchall() siempre y así
te evitas estos problemas.

Saludos
Joe


Excelente!!  ya me funciono.

A todos muuchas gracias por su tiempo y colaboración

Manuel Enrique González Ramírez

unread,
Jun 1, 2011, 9:54:03 PM6/1/11
to La lista de python en castellano
Hola Jose,

Gracias por tu consejo, ya el asunto estuvo solucionado con precisamente las instrucciones de Joe

Andrey Antoukh

unread,
Jun 4, 2011, 8:18:13 AM6/4/11
to La lista de python en castellano
Hola.
Ahora que leo este hilo, no me parece a mi que hay demasiadas respuestas (?) y todas prácticamente iguales...(?) En mi opinión con un par de distintas soluciones bastaría. O aun mejor, un enlace a la documentación y si después de haberla leído no entiende algo se pregunta. 

Un tiempo y un esfuerzo que se ahorra mucha gente. Escribir por llenar el espacio en el buzón de correo y el almacenamiento de la lista de correos no da ninguna recompensa. No es malo, pero es inútil.

Un saludo.
Andrei.
http://twitter.com/andsux
http://www.niwi.be
****
http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"
Reply all
Reply to author
Forward
0 new messages