Comment stockez-vous un "blob" de données binaires à l'aide de l'ORM de Django, avec un backend PostgreSQL? Oui, je sais Django fronce les sourcils sur ce genre de chose, et oui, je sais qu'ils préfèrent que vous utilisiez ImageField ou FileField pour cela, mais il suffit de dire que ce n'est pas pratique pour mon application.
J'ai essayé de le pirater en utilisant un TextField, mais j'obtiens parfois des erreurs lorsque mes données binaires ne confirment pas strictement le type d'encodage des modèles, qui est unicode par défaut. par exemple.
psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665
Cet extrait tout bon:
http://djangosnippets.org/snippets/1597/
Il s'agit probablement de la solution la plus simple pour stocker des données binaires dans un 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)
Il y a quelques autres extraits qui pourraient vous aider.
Si vous utilisez Django> = 1.6, il y a BinaryField
J'utilise ce champ simple pour le backend 'mysql', vous pouvez le modifier pour d'autres backends
class BlobField(models.Field):
description = "Blob"
def db_type(self, connection):
return 'blob'
Consultez également Stockage de la base de données de Django Storages: .
Je ne l'ai pas encore utilisé, mais il a l'air génial et je vais commencer à l'utiliser dès que je posterai ma réponse.