Это продолжение из: Python - Преобразование Hex в INT / CHAR
Теперь у меня есть рабочее решение для преобразования сохраненного шестнадцатеричного значения IP из sqlite3 db в читаемый и пригодный для использования формат. Однако до сих пор я проводил тестирование, копируя и вставляя значения непосредственно из средства просмотра базы данных sqlite3.
Я пытался опросить базу данных с помощью скрипта для поиска этой информации, однако я обнаружил, что она хранит данные BLOB-объектов в буфере, который не сразу воспринимается человеком.
Например, IP 192.168.0.1 сохраняется как тип BLOB-объекта под полем ip как X'C0A80001 '
Поскольку я работал с скопированного и вставленного примера в свой код, я создал код, чтобы убрать X и 'из шестнадцатеричного кода, чтобы иметь возможность затем преобразовать его. Чего я не могу получить, так это значения из базы данных (X'C0A80001 '<- это значение, которое я могу просмотреть с помощью менеджера БД).
Поиск Я нашел <a href="http://eli.thegreenplace.net/2009/05/29/storing-blobs-in-a-sqlite-db-with-pythonpysqlite/" rel="nofollow noreferrer">http://eli.thegreenplace.net/2009/05/29/storing-blobs-in-a-sqlite-db-with-pythonpysqlite/, который показал пример чтения больших двоичных объектов в базу данных sqlite и из нее, но их методы не работали. Они отображали ошибку;
print row[0], str(row[1]).encode('hex')
IndexError: tuple index out of range
Я довольно новичок в Python, поэтому извиняюсь, если мне не хватает чего-то простого, но любые указатели или примеры кода, которые кто-либо должен помочь мне разобраться в этом, были бы признательны.
EDIT:
До, не вставил код из приведенного выше примера;
c = conn.cursor()
c.execute('select ip from item where name = ' + "\'" + host + "\'")
for row in c:
print row[0], str(row[1]).encode('hex')
Может быть, я действительно понимаю, почему я не могу прочитать это так, как хочу
UPDATE:
Используя ответ ниже, я изменил свой код на;
rows = c.execute('select ip from item where name= ' + "\"" + host + "\"")
for row in rows:
print str(row[0]).encode("hex")