这篇文章是关于之前这篇文章的延伸:Python - Converting Hex to INT/CHAR
我现在已经有了将存储在sqlite3数据库中的IP的十六进制值转换为可读和可用格式的解决方案。然而,直到现在,我一直在通过从sqlite3数据库查看器直接复制和粘贴来进行测试。
我一直试图使用脚本轮询数据库以查找该信息,但我发现它显然将blob数据存储到一个不立即人类可读的缓冲区中。
例如,IP 192.168.0.1 在字段ip下以blob类型存储为X'C0A80001'
由于我是从一个复制和粘贴的示例开始编写代码的,因此我构建了代码以从十六进制中剥离X'和'以进行转换。问题是我无法从数据库中获取该值(X'C0A80001' <- 这个值是我可以用数据库管理器查看的值)。 在搜索中,我发现http://eli.thegreenplace.net/2009/05/29/storing-blobs-in-a-sqlite-db-with-pythonpysqlite/,其中显示了一个读取Blob到sqlite数据库的示例,但它们的方法不起作用。它们会显示以下错误;
我可能对此的理解有误,导致我无法按照自己想要的方式读取它。
更新: 使用下面的答案,我修改了我的代码:
我一直试图使用脚本轮询数据库以查找该信息,但我发现它显然将blob数据存储到一个不立即人类可读的缓冲区中。
例如,IP 192.168.0.1 在字段ip下以blob类型存储为X'C0A80001'
由于我是从一个复制和粘贴的示例开始编写代码的,因此我构建了代码以从十六进制中剥离X'和'以进行转换。问题是我无法从数据库中获取该值(X'C0A80001' <- 这个值是我可以用数据库管理器查看的值)。 在搜索中,我发现http://eli.thegreenplace.net/2009/05/29/storing-blobs-in-a-sqlite-db-with-pythonpysqlite/,其中显示了一个读取Blob到sqlite数据库的示例,但它们的方法不起作用。它们会显示以下错误;
print row[0], str(row[1]).encode('hex')
IndexError: tuple index out of range
我对Python还很陌生,如果有人能提供指针或者代码示例来帮助我理解这个问题,我将不胜感激。
编辑: 糟糕,我忘记在上面的示例中粘贴代码了;
c = conn.cursor()
c.execute('select ip from item where name = ' + "\'" + host + "\'")
for row in c:
print row[0], str(row[1]).encode('hex')
我可能对此的理解有误,导致我无法按照自己想要的方式读取它。
更新: 使用下面的答案,我修改了我的代码:
rows = c.execute('select ip from item where name= ' + "\"" + host + "\"")
for row in rows:
print str(row[0]).encode("hex")