[pyar] INSERTAR UNA IMAGEN EN UNA BASE DE DATOS MYSQL
Gerardo Rios
gsr.5392.tec en gmail.com
Lun Feb 29 23:10:51 ART 2016
HOLA ESTIMADOS:
POR FIN LO PUDE SOLUCIONAR, TENIA UNA ERROR EN LA CONSULTA SQL DE INSERT.
AHORA LE PASO EL CODIGO QUE ME FUNCIONA, GRACIAS POR SU TIEMPO EN BRINDARME
UNA MANO:
def CargaImagen():
#Establecemos la conexion con la base de datos
# Variable con la configuracion de la conexion
bd_imagenes = mysql.connector.connect(user='******', password='*******',
host='*************', database='imagenes_prueba')
#Variable 'cursor' que se encargara de realizar las consultas SQL y
contendra la informacion para esa consulta
cursor = bd_imagenes.cursor()
#--------------------------------------------------------------------------------------------------------------
#CARGAR LA IMAGEN
#Abro el archivo de imagen para cargar sus contenidos
archivo = "/home/gerardo/Escritorio/PYTHON/IMAGEN/piramide.jpg"
imagen = Image.open(archivo)
#PARA ENCONTRAR EL FORMATO DE LA IMAGEN
formato = imagen.format
#Guardamos la imagen en la BD
#datos = 'encoded_b64 = """' +
base64.encodestring(open(archivo,"rb").read()) + '"""' #transformamos la
imagen en datos
datos = base64.encodestring(open(archivo,"rb").read()) #transformamos la
imagen en datos
sql = 'INSERT INTO IMAGENES2 (imagen,tipo) VALUES ("% s","%
s")'%(datos,formato)
try:
#Ejecutamos el comando
cursor.execute(sql)
#Efectuamos los cambios en la base de datos
bd_imagenes.commit()
print "Los datos se agregaron con exito"
except Exception, e:
print e
#Si se genero algún error revertamos la operación
bd_imagenes.rollback()
print "no se pudo agregar los datos"
#-------------------------------------------------------------------------------------------------------------
# Cerramos cursor
cursor.close()
#--------------------------------------------------------------------------------------------------------------
#DESCONEXION DE LA BASE DE DATOS
# Nos desconectamos de la base de Datos
bd_imagenes.close()
El 29 de febrero de 2016, 13:04, Lucio <lucionardelli en gmail.com> escribió:
> 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
>>
>
>
> _______________________________________________
> 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/91b1e52b/attachment-0001.html>
Más información sobre la lista de distribución pyar