Python: guardar imagenes en una base de datos Sqlite
Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.
Hace un par de días Walter de Nicaragua me consultaba:
Estoy trabajando en una aplicacion para niños en las xo´s , estoy usando sqlite3 para guardar la informacion, y tambien necesito guardar fotos dentro de la base de datos.Como la fotos seran tomadas con la camara de las propias XO's, asumo no son tan grande en resolucion y tamaño.
Tambien, estuve revizando la lista de correo, pero no hay nada concreto, y a decir verdad recomiendan que guarde una referencia de la imagen en la base de datos, y luego haga una consulta, para recuperarla, pero tambien he visto que tiene sus pro y sus contras.
Esta es la respuesta. Primero necesitamos una tabla con un campo de tipo BLOB donde guardar la imagen:
>>> import sqlite3 >>> conn = sqlite3.connect('/tmp/example') >>> c = conn.cursor() >>> c.execute('''create table imagenes (imagen BLOB);''')
Abro una imagen que tengo en disco, mismo directorio que donde ejecute
el intérprete de Python, la cargo en memoria y la guardo en la base.
>>> imgdata = open('tomyNarnia.jpg', 'r').read() >>> len(imgdata) 1613949 >>> buff = sqlite3.Binary(imgdata) >>> c.execute('insert into imagenes values(?);', (buff,)) >>> conn.commit() >>> conn.close()
Luego podemos cerrar el intérprete. Con sqlite3 importado, recuperamos
la imagen.
>>> conn = sqlite3.connect('/tmp/example') >>> c = conn.cursor() >>> a = c.execute('select imagen from imagenes') >>> img = a.fetchone() >>> len(img) 1 >>> img (<read-write buffer ptr 0x1c75d60, size 1613949 at 0x1c75d20>,)
El resultado es una tupla, pero como seleccionamos un solo campo de la
tabla, hay un solo elemento.
>>> img = img[0] >>> len(img) 1613949
Finalmente lo escribimos en una imagen.
>>> f = open('newimage.jpg', 'w') >>> f.write(img) >>> f.close()
Comentarios
Comments powered by Disqus