[Python-es] Problemas con executemany desde python con SQLite
Manuel Enrique González Ramírez
maengora en gmail.com
Jue Jun 9 15:31:54 CEST 2011
El 8 de junio de 2011 21:20, lopz <lowlifebob en gmail.com> escribió:
> El día 8 de junio de 2011 21:40, Manuel Enrique González Ramírez
> <maengora en gmail.com> escribió:
> >
> >
> > El 8 de junio de 2011 18:59, lopz <lowlifebob en gmail.com> escribió:
> >>
> >> El día 8 de junio de 2011 18:32, Manuel Enrique González Ramírez
> >> <maengora en gmail.com> escribió:
> >> > El 8 de junio de 2011 16:43, Carlos Zuniga <carlos.zun en gmail.com>
> >> > escribió:
> >> >>
> >> >> Hola,
> >> >>
> >> >> 2011/6/8 Manuel Enrique González Ramírez <maengora en gmail.com>:
> >> >> > Hola a tod en s,
> >> >> > Estoy tratando de insertar un archivo desde Python con SQLite. La
> >> >> > primera
> >> >> > vez funciono sin inconvenientes, pero al vaciar la tabla y correr
> >> >> > nuevamente
> >> >> > el script falla arrojando este error:
> >> >> > Traceback (most recent call last):
> >> >> > File "/home/manuel/python/diferencias/temp2.py", line 45, in
> >> >> > <module>
> >> >> > c.executemany('insert into tabla(secuencia) values(?)', secc)
> >> >> > AttributeError: 'str' object has no attribute 'executemany'
> >> >>
> >> >> Parece que tu objeto c es una cadena de texto, no un cursor de sqlite
> >> >>
> >> >> >
> >> >> > El fragmento del codigo
> >> >> > secc= csv.reader(open('datosg.csv'))
> >> >> > c.executemany('insert into tabla(secuencia) values(?)', secc)
> >> >> > conexion.commit()
> >> >> >
> >> >>
> >> >> Tal vez te falta c = conexion.cursor() antes de ese fragmento?
> >> >
> >> > Ya la tenía definida:
> >> > # Datos de conexion
> >> > conexion = sqlite3.connect('dif_db.sqlite')
> >> > # Configuracion del cursor
> >> > c = conexion.cursor()
> >> >>
> >>
> >> lo tienes así?
> >>
> >> conexion = sqlite3.connect('dif_db.sqlite')
> >> c = conexion.cursor()
> >> c.execute.....
> >>
> >> Si es así no debería decirte que c es un str, podrías poner el código
> >> completo de esa parte?
> >
> > Código completo
> > #!/usr/bin/env python
> > # -*- coding: cp1252 -*-
> > import os,sys,csv
> > import sqlite3
> > # Datos de conexion
> > conexion = sqlite3.connect('dif_db.sqlite')
> > # Configuracion del cursor
> > c = conexion.cursor()
> > # Limpio las tablas
> > c.execute('delete from tabla1')
> > conexion.commit()
> > print 'Tabla1 inicializada'
> > c.execute('delete from tabla2')
> > conexion.commit()
> > print 'Tabla2 inicializada'
> > # Solicito el nombre de los archivos a analizar
> > fc = open('archivo1.txt','r')
> > fg = open('archivo2.txt','r')
> > ficherosalida = open('datosc.csv','w')
> > for linea in fc:
> > ficherosalida.write(linea.split('|')[-1])
> > fc.close()
> > ficherosalida.close()
> > print 'Datos de Tabla1 preparados'
> > ficherosalida2 = open('datosg.csv','w')
> > for linea2 in fg:
> > c = linea2[7:17]
>
A esto es lo que solemos llamarle de forma coloquial.... error de indio.
> En esta parte está sobre escribiendo tu variable y se le asigna un
> tipo str, con cambiar:
> c = linea2[7:17]
> por
> linea = linea2[7:17]
> y
> > ficherosalida2.write(c)
>
> por ficherosalida2.write(linea)
>
> deberia funcionar
>
> > ficherosalida2.write('\n')
> > fg.close()
> > ficherosalida2.close()
> >
> >
> > # Abre el archivo y lo prepara para insertar los datos
> > # en la bdd
> > secc= csv.reader(open('datosg.csv'))
> > c.executemany('insert into tabla1(secuencia) values(?)', secc)
> > conexion.commit()
> > conexion.close()
> >
>
> Ahora me vota este error:
c.executemany('insert into tabla1(secuencia) values(?)', secc)
ProgrammingError: Incorrect number of bindings supplied. The current
statement uses 1, and there are 0 supplied.
Tocará leer más a ver dónde está el error; por ahora, a trabajar....
> Y.. es que por eso se recomienda poner nombres de variables que
> describan al objeto,
> por ejemplo cursor en lugar de c me parece mejor
>
>
> >>
> >> saludOS
> >>
> >> >> Saludos
> >> >> --
> >> >> Linux Registered User # 386081
> >> >> A menudo unas pocas horas de "Prueba y error" podrán ahorrarte
> minutos
> >> >> de leer manuales.
> >> >> _______________________________________________
> >> >> Python-es mailing list
> >> >> Python-es en python.org
> >> >> http://mail.python.org/mailman/listinfo/python-es
> >> >> FAQ: http://python-es-faq.wikidot.com/
> >> >
> >> >
> >> >
> >> > --
> >> > Manuel Enrique González Ramírez
> >> > http://maengora.blogspot.com
> >> >
> >> > _______________________________________________
> >> > Python-es mailing list
> >> > Python-es en python.org
> >> > http://mail.python.org/mailman/listinfo/python-es
> >> > FAQ: http://python-es-faq.wikidot.com/
> >> >
> >> >
> >>
> >>
> >>
> >> --
> >> lopz es libre, usa --> GNU/linux gentoo
> >>
> >> +--[RSA 2048]--+
> >> | ..o.o=+ |
> >> | o =o*.+ |
> >> | . . *oO . |
> >> | .EBoo |
> >> | o.S |
> >> +--[lopz.org]--+
> >> _______________________________________________
> >> Python-es mailing list
> >> Python-es en python.org
> >> http://mail.python.org/mailman/listinfo/python-es
> >> FAQ: http://python-es-faq.wikidot.com/
> >
> >
> >
> > --
> > Manuel Enrique González Ramírez
> > http://maengora.blogspot.com
> >
> > _______________________________________________
> > Python-es mailing list
> > Python-es en python.org
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> >
> >
>
>
>
> --
> lopz es libre, usa --> GNU/linux gentoo
>
> +--[RSA 2048]--+
> | ..o.o=+ |
> | o =o*.+ |
> | . . *oO . |
> | .EBoo |
> | o.S |
> +--[lopz.org]--+
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
--
Manuel Enrique González Ramírez
http://maengora.blogspot.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110609/ee873980/attachment.html>
Más información sobre la lista de distribución Python-es