データベース内のzlib - ジャンゴ
-
22-08-2019 - |
質問
私はmodels.TextFieldでzlibbed文字列を入れしようとすると、
>>> f = VCFile(head = 'blahblah'.encode('zlib'))
>>> f.save()
それは失敗します:
...
raise DjangoUnicodeDecodeError(s, *e.args)
DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 1: unexpected code byte. You passed in 'x\x9cK\xcaI\xccH\x02b\x00\x0eP\x03/' (<type 'str'>)
この問題を解決するためにどのような方法がある(文字列をエスケープから離れて - それは、スペースefficentである必要があります)。
?解決
マーカス氏と同じように、
、あなたはバイナリ形式でそれを維持したい場合はBLOBを使用する必要があります。あなたはそれをコードしてOKなら、あなたは、base64エンコードを使用することができます:
from base64 import binascii
f = VCFile(head = binascii.b2a_base64('blahblah'.encode('zlib')))
を33K文字と私の非常に基本的なテストでは、zlibの文字列は、28%が元の文字列の大きさだった、zlibの文字列base64エンコードは、37%は元の文字列の大きさでした。圧縮にはかなり良くないが、それでも大きな改善ます。
他のヒント
あなたはそれをエンコードしたくない場合は、
は、バイナリオブジェクト(BLOB)、ではない、それを文字列として保存する必要があります。 Djangoは一緒に何かを箱から出してBlobFieldsをサポートしているので、ネット上でそれを探しに行くか、ハックしていないようです。
所属していません StackOverflow