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

08-17 13:30