Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Django二进制字段转换为数组_Python_Arrays_Django_Oracle_Blob - Fatal编程技术网

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

Python 将Django二进制字段转换为数组,python,arrays,django,oracle,blob,Python,Arrays,Django,Oracle,Blob,我将Django与遗留Oracle数据库一起使用。在这个数据库中有一个保存为blob的数组,我想用Django读取它。模型类是使用manage.py inspectdb命令自动创建的 class myTable(models.Model): myRow = models.BinaryField(blank=True, null=True) 如何将二进制字段转换为数组 谢谢。我使用python中的模块解决了这个问题。 在我的例子中,压缩在myRow二进制字段中的向量表示如下: 32 b

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

class myTable(models.Model):
     myRow = models.BinaryField(blank=True, null=True)
如何将二进制字段转换为数组


谢谢。

我使用python中的模块解决了这个问题。 在我的例子中,压缩在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)
从结构导入*
def getBlobVectorValues(blobData,formatStr):
从(formatStr,blobData,偏移量=8)返回解包
def getBlobVectorSize(blobData):
blobSize=unpack_from(“!I”,blobData,offset=4)
返回blobSize[0]
def readBlob(blobData):
blobEncoding=unpack_from('!I',blobData,offset=0)
formatStr=“!”
if(blobEncoding[0]==23):#编码向量
vectorSize=getBlobVectorSize(blobData)
对于范围内的x(0,矢量大小):
formatStr+=“d”
其他:
raise VALUETERROR(“意外的blob编码:%d”%blobEncoding[0])
返回GetBlobVector值(blobData、formatStr)

您可以使用Django的model-to-dict获取dict中的modeldata,然后将dict转换为列表/数组。从django.forms.models导入model_到_dict,model_到_dict(实例,字段=['myRow',(+要包含的其他字段)]我试过了,model_to_dict返回了一个空的dict。存储在字段中的数据是二进制编码的。这个函数现在应该怎么做?什么是键或值?它应该返回一个dict,字段名/对象作为键,字段值作为它的值。如果有多个字段,它返回一个multiplekeydict。如果字段中有数据,它应该被重新编码打开后,在没有字段列表的情况下尝试代码,请参阅文档。第二种方法是过滤,它还返回类似dict的models_to_dict;filtered_dict=myTable.objects.values('myRow')从django.forms.models导入model_to_dict,在视图中;instance=myTable(),打印model_to_to_dict(instance),返回{u'myRow':…fieldcontent}