Django Blob 模型字段
Posted
技术标签:
【中文标题】Django Blob 模型字段【英文标题】:Django Blob Model Field 【发布时间】:2011-06-22 08:55:33 【问题描述】:如何使用 Django 的 ORM 和 PostgreSQL 后端存储二进制数据的“blob”?是的,我知道 Django 不赞成这种事情,是的,我知道他们更喜欢你使用 ImageField 或 FileField,但我只想说,这对我的应用程序来说是不切实际的。
我尝试过使用 TextField 来破解它,但是当我的二进制数据没有严格确认模型编码类型(默认情况下为 unicode)时,我偶尔会遇到错误。例如
psycopg2.DataError: invalid byte sequence for encoding "UTF8": 0xe22665
【问题讨论】:
【参考方案1】:如果您使用的是 Django >= 1.6,则有一个 BinaryField
【讨论】:
【参考方案2】:这个sn-p有什么好处:
http://djangosnippets.org/snippets/1597/
这可能是存储二进制数据的最简单的解决方案 文本字段。
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)
还有一些其他的 sn-ps 可能会有所帮助。
【讨论】:
谢谢。我一直在使用类似的东西,但是 sn-p 要简单得多。 感谢伟大的 sn-p。你知道这是否支持过滤?即Foo.objects.filter(data=my_file)
是否通过get_data
处理my_file
?【参考方案3】:
我一直将这个简单的字段用于'mysql'后端,你可以为其他后端修改它
class BlobField(models.Field):
description = "Blob"
def db_type(self, connection):
return 'blob'
【讨论】:
抱歉没有详细说明,当时我正在调查。从 Django 1.2 开始,db_type 方法采用connection
参数。这是syncdb
期间异常的原因。我已经修改了代码。【参考方案4】:
另外,请查看Django Storages' Database Storage:。
我还没有使用它,但它看起来很棒,我将在我发布答案后立即开始使用它。
【讨论】:
以上是关于Django Blob 模型字段的主要内容,如果未能解决你的问题,请参考以下文章