Поле BinaryField

Поле BinaryField предназначено для хранения произвольных двоичных данных в базе данных. Оно используется в моделях Django для работы с файлами в двоичном формате, изображениями, зашифрованными данными или любыми другими бинарными объектами. Поле возвращает данные в виде байтовой строки (bytes). При использовании данного поля следует учитывать, что операции фильтрации и поиска по нему могут быть ограничены возможностями конкретной СУБД.

Синтаксис

pythonfrom django.db import models

class MyModel(models.Model):
  binary_data = models.BinaryField()

Параметры

Поле BinaryField принимает следующие параметры:

max_length - максимальная длина хранимых данных в байтах. Необязательный параметр.

editable - определяет, может ли поле быть изменяемым. По умолчанию True.

default - значение по умолчанию для поля.

null - разрешает ли поле значение NULL. По умолчанию False.

Пример

Создадим модель для хранения изображений в двоичном виде:

pythonfrom django.db import models

class Image(models.Model):
  name = models.CharField(max_length=100)
  data = models.BinaryField(max_length=1048576)
  created_at = models.DateTimeField(auto_now_add=True)

  def __str__(self):
    return self.name

Пример

Сохраним изображение в двоичном формате:

pythonfrom myapp.models import Image
from django.core.files import File

with open('image.png', 'rb') as f:
  binary_content = f.read()
  image = Image.objects.create(
    name='my_image',
    data=binary_content
  )

Пример

Получим сохранённое изображение и проверим его размер:

pythonfrom myapp.models import Image

image = Image.objects.get(name='my_image')
data_size = len(image.data)
print("Image data size:")
print(f"{data_size} bytes")

Результат выполнения кода:

python"Image data size:"
"1048576 bytes"

Пример

Создадим модель для хранения зашифрованных данных:

pythonfrom django.db import models

class EncryptedData(models.Model):
  title = models.CharField(max_length=200)
  content = models.BinaryField()
  is_active = models.BooleanField(default=True)

Пример

Сохраним зашифрованное сообщение в базу данных:

pythonfrom myapp.models import EncryptedData
import base64

encrypted_message = b'\x00\x01\x02\x03\x04\x05'
data = EncryptedData.objects.create(
  title='secret message',
  content=encrypted_message
)
print("Data saved:")
print(data.title)

Результат выполнения кода:

python"Data saved:"
"secret message"

Пример

Проверим, существует ли запись с указанными данными:

pythonfrom myapp.models import EncryptedData

has_data = EncryptedData.objects.filter(
  content=b'\x00\x01\x02\x03\x04\x05'
).exists()
print("Data exists:")
print(has_data)

Результат выполнения кода:

python"Data exists:"
"True"

Смотрите также

  • поле FileField,
    которое используется для хранения загруженных файлов
  • поле ImageField,
    которое предназначено для хранения изображений
  • поле JSONField,
    которое хранит структурированные данные в формате JSON
  • поле TextField,
    которое хранит большие текстовые данные