Quiero insertar datos binarios (png, jpg, gif, etc.) en una base de datos sqlite3 dentro de un script bash.
Uso el binario independiente sqlite3
. ¿Cómo puedo escribir la declaración SQL?
Gracias por su ayuda.¿Cómo insertar datos binarios en la base de datos sqlite3 en bash?
Respuesta
Aquí hay una manera de hacerlo. El archivo test.jpg
se inserta en la tabla de foo
de la base de datos foodb
después de estar hexdump
ed al formato literal binaria de SQLite:
[[email protected] tmp]$ sqlite3 foodb "create table foo (bar blob);"
[[email protected] tmp]$ echo "insert into foo values (X'`hexdump -ve '1/1 "%.2x"' test.jpg`');" | sqlite3 foodb
EDITAR
Y aquí vemos que los datos son almacenados en " plena fidelidad" que el archivo .jpg puede ser restaurada:
[[email protected] tmp]$ sqlite3 foodb "select quote(bar) from foo;" | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' > bla.jpg
[[email protected] tmp]$ ll *.jpg
-rw-rw-r-- 1 someone someone 618441 Apr 28 16:59 bla.jpg
-rw-rw-r-- 1 someone someone 618441 Apr 28 16:37 test.jpg
[[email protected] tmp]$ md5sum *.jpg
3237a2b76050f2780c592455b3414813 bla.jpg
3237a2b76050f2780c592455b3414813 test.jpg
Por otra parte, este enfoque es eficiente del espacio, ya que almacenar la .jpg usando sqlit e tipo BLOB. No codifica la imagen utilizando, por ejemplo, la codificación base64.
[[email protected] tmp]$ ll foodb
-rw-r--r-- 1 someone someone 622592 Apr 28 16:37 foodb
Gracias. Lo intentaré. – kev
Esto no funcionará :(Sé que no funcionará, porque lo iba a publicar hace 20 minutos, pero no puedo hacer que funcionen algunos casos de prueba. Específicamente, si consulta esa columna, los resultados serán truncado en el primer 0x00 (en jpeg, está casi garantizado que tendrá un byte NULL en alguna parte). Si selecciona 'quote (bar)' le dará el x 'original' ... ' –
@DavidSouther: is not es normal tener 0x00 en datos binarios ??? por favor lea sobre el tipo BLOB de sqlite. Lo que está esperando es que los datos estén almacenados en algún formato legible por humanos que sea mucho menos eficiente en cuanto a espacio, el OP no lo requiere. –
Como mencioné en el comentario en la respuesta de @ sixfeetsix, insertar los datos es solo la mitad del problema. Una vez que esté dentro, tendrás que volver a sacarlo. Podemos usar xxd para esto.
#A nice hubble image to work with.
echo 'http://asd.gsfc.nasa.gov/archive/hubble/Hubble_20th.jpg' > imageurl.txt
image=imageurl.txt
curl $image > image.jpg
#Insert the image, using hexdump to read the data into SQLite's BLOB literal syntax.
echo "create table images (image blob);" | sqlite3 images.db
echo "insert into images (image) values(x'$(hexdump -ve '1/1 "%0.2X"' image.jpg)');" | sqlite3 images.db 2>&1
#Select just the one image, then use xxd to convert from hex back to binary.
echo "select quote(image) from images limit 1 offset 0;" | sqlite3 images.db | tr -d "X'" | xxd -r -p > newimage.jpg
eog newimage.jpg
- 1. sqlite3 insertar y leer datos BLOB en la base de datos
- 2. Insertar datos binarios en MySQL (sin PreparedStatement)
- 3. Pasar datos binarios como argumentos en bash
- 4. Evitar la base de datos sqlite3 bloqueado
- 5. LINQ Consulta para insertar datos en la base de datos
- 6. Insertar datos en la base de datos Oracle utilizando php
- 7. Insertar datos binarios en SQL Server usando PHP
- 8. Cómo insertar datos binarios en MSSQL usando PDO
- 9. archivo de base de datos Sqlite3 extensión
- 10. ¿Cómo insertar caracteres arábigos en la base de datos sql?
- 11. ¿Cómo insertar null en la base de datos?
- 12. Cómo insertar DECIMAL en la base de datos MySQL
- 13. ¿Cómo insertar un archivo en la base de datos MySQL?
- 14. Rieles: almacenamiento de archivos binarios en la base de datos
- 15. INSERTAR en la cadena DateTime de la base de datos
- 16. Rieles, cómo migrar datos de la base de datos de desarrollo sqlite3 a la base de datos de producción MySQL?
- 17. ¿Cómo copiar la base de datos en uso a otra base de datos en django?
- 18. El uso de shell script para insertar datos en la base de datos MySQL remota
- 19. Vaciar mi base de datos Sqlite3 en RoR
- 20. Datos binarios en MySQL
- 21. Insertar matriz en la base de datos SQLite en android
- 22. ¿Cómo insertar datos en la base de datos SQLite en android?
- 23. ¿Abrir base de datos y ver tablas en sqlite3?
- 24. Crear base de datos sqlite3 en el prompt
- 25. Insertar fecha/hora en la base de datos de Access
- 26. almacenamiento de datos binarios en mysql
- 27. ¿Cómo insertar caracteres especiales en una base de datos?
- 28. ¿Cómo insertar matrices en una base de datos?
- 29. Insertar artículos directamente en la base de datos MediaWiki
- 30. Insertar blob en la base de datos Oracle con C#
No estoy seguro de que la herramienta de línea de comandos le permitirá insertar datos arbitrarios por el estilo. En primer lugar, podrías base64 codificar los datos, supongo. – larsks