Python - Lectura del tipo BLOB de SQLite3 DB
Esto es un seguimiento de:Python - Convirtiendo Hex a INT / CHAR
Ahora tengo una solución de trabajo para convertir el valor hexadecimal almacenado de una IP de un sqlite3 db a un formato legible y utilizable. Sin embargo, hasta ahora he estado probando copiando y pegando los valores directamente desde un visor de sqlite3 db.
He estado tratando de sondear el db con un script para buscar esa información, sin embargo, he descubierto que aparentemente almacena datos de blob en un búfer que no es instantáneamente legible para los humanos.
Por ejemplo, la IP 192.168.0.1 se almacena como tipo de blob bajo la IP del campo como X'C0A80001 '
Desde que trabajé desde un ejemplo copiado y pegado en mi código, he construido un código para quitar la X 'y' del hex para poder luego convertirlo. Lo que no puedo obtener es ese valor de la base de datos (X'C0A80001 '<- este valor que puedo ver con un administrador de db). Buscando encontréhttp: //eli.thegreenplace.net/2009/05/29/storing-blobs-in-a-sqlite-db-with-pythonpysqlite que mostró un ejemplo de lectura de blobs hacia y desde un sqlite db pero sus métodos no funcionaron. Mostraron el error;
print row[0], str(row[1]).encode('hex')
IndexError: tuple index out of range
Soy bastante nuevo en Python, así que me disculpo si me falta algo básico, pero cualquier puntero o ejemplo de código que alguien tenga para ayudarme a entender esto sería apreciado.
EDIT: Doh, no pegué el código del ejemplo anterior;
c = conn.cursor()
c.execute('select ip from item where name = ' + "\'" + host + "\'")
for row in c:
print row[0], str(row[1]).encode('hex')
uede ser que comprenda que eso es realmente extraño en cuanto a por qué no puedo leerlo de la forma en que quiero
UPDATE: Utilizando la respuesta a continuación, modifiqué mi código a;
rows = c.execute('select ip from item where name= ' + "\"" + host + "\"")
for row in rows:
print str(row[0]).encode("hex")