web-dev-qa-db-ja.com

Django Blobモデルフィールド

DjangoのORMを使用して、PostgreSQLバックエンドでバイナリデータの「ブロブ」をどのように保存しますか?はい、私はDjangoがその種のことで眉をひそめていることを知っています、そして、はい、彼らはあなたがそのためにImageFieldまたはFileFieldを使用することを好むことを知っていますが、それは私のアプリケーションにとって非現実的であると言うだけで十分です。

TextFieldを使用してハッキングを試みましたが、バイナリデータがモデルのエンコードタイプ(デフォルトではユニコード)を厳密に確認しないと、時々エラーが発生します。例えば.

psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665
29
Cerin

このスニペットは良い:

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)

役立つ他のスニペットがいくつかあります。

26
Spacedman

Django> = 1.6を使用している場合、 BinaryField

25
Sarah Messer

私は「mysql」バックエンドにこの単純なフィールドを使用していますが、他のバックエンド用に変更できます

class BlobField(models.Field):
    description = "Blob"
    def db_type(self, connection):
        return 'blob'
10
Anurag Uniyal

また、 Django Storages 'Database Storage: も確認してください。

まだ使用していませんが、見た目はすばらしく、回答を投稿したらすぐに使用します。

0
Ben Roberts