我使用Django与遗留的Oracle数据库。在这个数据库中,有一个作为blob保存的数组,我想用Django读取它。模型类是通过使用manage.py inspectdb
命令自动生成的。
class myTable(models.Model):
myRow = models.BinaryField(blank=True, null=True)
如何将二进制字段转换为数组?
谢谢。
我使用Django与遗留的Oracle数据库。在这个数据库中,有一个作为blob保存的数组,我想用Django读取它。模型类是通过使用manage.py inspectdb
命令自动生成的。
class myTable(models.Model):
myRow = models.BinaryField(blank=True, null=True)
我通过在Python中使用struct模块解决了这个问题。 在我的情况下,打包在myRow二进制字段中的向量表示如下:
32 bit encoding | 32 bit number of elemnets (n) | n * encoding size
例如,对于一个双精度向量:
from struct import *
def getBlobVectorValues(blobData, formatStr):
return unpack_from(formatStr,blobData, offset=8)
def getBlobVectorSize(blobData):
blobSize = unpack_from('!I',blobData, offset=4)
return blobSize[0]
def readBlob(blobData):
blobEncoding = unpack_from('!I',blobData, offset=0)
formatStr = "!"
if (blobEncoding[0] == 23): #encoding vector<double>
vectorSize = getBlobVectorSize(blobData)
for x in range(0, vectorSize):
formatStr += "d"
else:
raise ValueError("Unexpected blob encoding: %d" % blobEncoding[0])
return getBlobVectorValues(blobData,formatStr)