我将Django与旧版Oracle数据库一起使用。在这个数据库中是一个保存为blob的数组,我想用Django读取它。使用manage.py inspectdb
命令自动创建Model类。
class myTable(models.Model):
myRow = models.BinaryField(blank=True, null=True)
如何将二进制字段转换为数组?
感谢。
答案 0 :(得分:0)
我在python中使用struct模块解决了这个问题。 在我的例子中,在myRow二进制字段中打包的向量表示如下:
32 bit encoding | 32 bit number of elemnets (n) | n * encoding size
E.g。对于双向量:
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)