DjangoのORMを使用して、PostgreSQLバックエンドでバイナリデータの「ブロブ」をどのように保存しますか?はい、私はDjangoがその種のことで眉をひそめていることを知っています、そして、はい、彼らはあなたがそのためにImageFieldまたはFileFieldを使用することを好むことを知っていますが、それは私のアプリケーションにとって非現実的であると言うだけで十分です。
TextFieldを使用してハッキングを試みましたが、バイナリデータがモデルのエンコードタイプ(デフォルトではユニコード)を厳密に確認しないと、時々エラーが発生します。例えば.
psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665
このスニペットは良い:
http://djangosnippets.org/snippets/1597/
これはおそらく、TextFieldにバイナリデータを格納するための最も簡単なソリューションです。
import base64
from Django.db import models
class Foo(models.Model):
_data = models.TextField(
db_column='data',
blank=True)
def set_data(self, data):
self._data = base64.encodestring(data)
def get_data(self):
return base64.decodestring(self._data)
data = property(get_data, set_data)
役立つ他のスニペットがいくつかあります。
Django> = 1.6を使用している場合、 BinaryField
私は「mysql」バックエンドにこの単純なフィールドを使用していますが、他のバックエンド用に変更できます
class BlobField(models.Field):
description = "Blob"
def db_type(self, connection):
return 'blob'
また、 Django Storages 'Database Storage: も確認してください。
まだ使用していませんが、見た目はすばらしく、回答を投稿したらすぐに使用します。