将Django二进制字段转换为数组

时间:2015-11-10 14:02:56

标签: python arrays django oracle blob

我将Django与旧版Oracle数据库一起使用。在这个数据库中是一个保存为blob的数组,我想用Django读取它。使用manage.py inspectdb命令自动创建Model类。

class myTable(models.Model):
     myRow = models.BinaryField(blank=True, null=True)

如何将二进制字段转换为数组?

感谢。

1 个答案:

答案 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)