django mysql blob存入_用django和sqli存储BLOB数据

在尝试将二进制数据(如SHA1散列)从SQLite迁移到Django与MySQL时,遇到DatabaseError,提示不能使用8-bit bytestrings。为了解决这个问题,尝试了自定义的BlobField类,但出现了Unicode兼容性问题。最终采纳了BinaryField类的建议,但在get_db_prep_value()中遇到了TypeError。尽管如此,通过注释掉某些代码,模型似乎可以正常工作,但对这种做法的潜在影响尚不清楚。
摘要由CSDN通过智能技术生成

首先,我知道有很多类似的问题,但是其他的解决方案并没有涵盖我的具体情况:

在我的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(),它还能工作吗?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值