Python 将Django二进制字段转换为数组
我将Django与遗留Oracle数据库一起使用。在这个数据库中有一个保存为blob的数组,我想用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
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}