我将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)