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

Converting a Django binary field to an array

我将 Django 与旧版 Oracle 数据库一起使用。在这个数据库中是一个保存为 blob 的数组,我想用 Django 读取它。模型 class 是使用 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)