0

我遇到了一种情况,os.urandom(BLOCK_SIZE)我需要使用 Django 模型将二进制数据(使用创建的)存储在 Postgres 数据库中。

我已经阅读了一些关于 Django 尚不支持 Bytea (VARBINARY) 字段类型的参考资料。我在这里找到了参考,但不知道从哪里获得该库(django_postgresql)。

我目前在 Ubuntu 12.04 上使用 Python 2.7 和 Django 1.4 - 如果有帮助的话。

我已经阅读了一些建议,作为解决此问题的一种方法是在存储之前将我的数据转换为十六进制。

import binascii
key = binascii.hexlify(value)

好的,现在呢?我试图将此值保存到数据库中,但出现错误:

invalid byte sequence for encoding "UTF8": 0xd6c2

好的,我应该使用哪种数据字段类型来执行此操作?

key = models.TextField(max_length = 200)?

key = models.CharField(max_length = 200)?

key = models.???(max_length = 200)???

我想远离创建自己的自定义字段类型。首先,我对 Django 还是很陌生,而且还不会觉得这样做很舒服。其次,我对数据库很陌生,所以我不确定从哪里开始定义这样的东西。

有什么建议么?

4

1 回答 1

1

如果您在保存键值时遇到 unicode 错误,则说明您做错了。binascii.hexlify()返回一个简单的十六进制字符串,它不会给你“无效的字节序列”。

要获得更高效的存储,请使用 base64 编码:

import base64
mymodelinstance.key = base64.b64encode(raw_key_value)

并解码:

raw_key_value = base64.b64decode(mymodelinstance.key)

您可以只使用长度的 CharFieldBLOCK_SIZE * 2来保存十六进制数据,或者4 * ( BLOCK_SIZE / 3)用于 base64。

于 2012-07-05T20:40:54.720 回答