[pyar] INSERTAR UNA IMAGEN EN UNA BASE DE DATOS MYSQL

Lucio lucionardelli en gmail.com
Lun Feb 29 13:04:28 ART 2016


Buenas tardes,

yo recomendaría aprovechar la sanitización (puaj!) de datos que te da el
conector sql, pasando los argumentos al cursor como recomendó @Gabriel
Davini

Como indica la excepción, el problema está en que al hacer:

 sql = """INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)""" , (datos,
> formato)
>

lo que estás generando (como también dijeron), es una tupla. En particular,
una cuyo primer argumento es un string y  la segunda es otra tupla:


>  >>> datos = 'foo'

>>> formato = 'bar'

>>> sql = """INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)""" ,
> (datos, formato)

>>> print sql
>
('INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)', ('foo', 'bar'))

>>> sql[0]

'INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)'

>>> sql[1]

('foo', 'bar')


Te recomendaría le pases los argumentas al cursor:

sql = """INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)"""

  try:
>    #Ejecutamos el comando
>     cursor.execute(sql, datos, formato)
>    #Efectuamos los cambios en la base de datos
>     bd_imagenes.commit()
>     print "Los datos se agregaron con exito"
>   except:
>

donde estás definiendo sql como un string (no una tupla) y le estás
"indicando" al cursor que tiene que ejecutar la consulta sql y poner en los
"agujeros" (los %s digamos) los valores pasados como argumento.

Espero que se entienda. saludos


El 29 de febrero de 2016, 10:52, Gabriel Davini <
gabrielfranciscodavini en gmail.com> escribió:

>
> 2016-02-28 21:34 GMT-03:00 Gerardo Rios <gsr.5392.tec en gmail.com>:
>
>>
>> Wrong number of arguments during string formatting
>>
>> QUE SI LO TRADUZCO ME DICE: Número incorrecto de argumentos en el formato
>> de cadenas
>>
>> PARA MI QUE EL ERROR ESTA EN EL TIPO DE DATOS DE LA IMAGEN, YO LO PUSE
>> COMO LONGBLOB Y CREO QUE TIENE QUE SER BLOB SOLAMENTE, VOY A VER QUE ME DA.
>>
>
> No, no tiene que ver con el tipo de dato de la columna
>
>
>>   #se carga los datos en la base de datos
>>>   sql = """INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)""" ,
>>> (datos, formato)
>>>
>>
> Lo que pasa es que aca estás creando una tupla, mirá:
>
> >>> datos = "foo"
> >>> formato = "bar"
> >>> sql = """INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)""" ,
> (datos, formato)  # aca deberías reemplazar la , por %
> >>> print sql
> ('INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)', ('foo', 'bar'))
> >>> print type(sql)
> <type 'tuple'>
>
> Lo que tendrías que hacer es:
>
> >>> sql = """INSERT INTO IMAGENES (imagen,tipo) VALUES (% s,% s)""" %
> (datos, formato)
> >>> print sql
> INSERT INTO IMAGENES (imagen,tipo) VALUES (foo,bar)
> >>> print type(sql)
> <type 'str'>
>
> Saludos
> --
> Gabriel.
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160229/859bea3f/attachment.html>


Más información sobre la lista de distribución pyar