首先,我知道有很多类似的问题,但是其他的解决方案并没有涵盖我的具体情况:
在我的sqlite数据库中有现有的二进制数据(SHA1和类似的散列)。通过谷歌搜索和阅读django-docs我得出了以下结论:import base64
class BlobField(models.Field):
"""
Stores raw binary data
"""
description = 'Stores raw binary data'
__metaclass__ = models.SubfieldBase
def __init__(self, *args, **kwds):
super(BlobField, self).__init__(*args, **kwds)
def get_internal_type(self):
return "BlobField"
def get_db_prep_value(self, value, connection=None, prepared=False):
return base64.decodestring(value)
def to_python(self, value):
return base64.encodestring(value)
它可以满足我的需要,在正确的时刻对值进行编码和解码,但是在将模型保存到数据库中时,会出现以下错误:DatabaseError: You must not use 8-bit bytestrings unless you use a
text_factory that can interpret 8-bit bytestrings (like text_factory =
str). It is highly recommended that you instead just switch your
application to Unicode strings.
我该怎么解决这个问题?(可能不会破坏应用程序其余部分的unicode兼容性)
我无法更改db列的格式,因为数据被另一个应用程序使用。在
编辑:
根据@filip dupanovic的建议,我采用了BinaryField类,如下所示:
类二进制字段(模型。字段):
description=U(“原始二进制数据”)
^{pr2}$
注意,我必须在get_db_prep_value()处插入注释,就像这样,如果我取消注释这些行,就会得到一个错误TypeError: get_db_prep_value() got multiple values for keyword argument 'connection'
我可以接受这一点,但我不完全理解忽略它的含义。即使不调用super(),它还能工作吗?在