0

os.urandom(BLOCK_SIZE)Djangoモデルを使用してPostgresデータベースに保存する必要のあるバイナリデータ(を使用して作成)がある状況に遭遇しました。

DjangoがまだBytea(VARBINARY)フィールドタイプをサポートしていないことについてのいくつかのリファレンスを読みました。ここでリファレンスを見つけましたが、そのライブラリ(django_postgresql)の入手先がわかりません。

私は現在、Ubuntu12.04でPython2.7とDjango1.4を使用しています。

これを回避する方法として、データを保存する前にデータを16進数に変換する方法として、いくつかの提案を読みました。

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()「無効なバイトシーケンス」を提供しない16進文字の単純な文字列を返します。

より効率的なストレージを得るには、base64エンコーディングを使用してください。

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

そしてデコードするには:

raw_key_value = base64.b64decode(mymodelinstance.key)

長さのCharFieldを使用して、BLOCK_SIZE * 216進データまたは4 * ( BLOCK_SIZE / 3)base64を保持できます。

于 2012-07-05T20:40:54.720 に答える