РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
18 of 818 menu

Поле BigIntegerField

Поле BigIntegerField предназначено для хранения целых чисел в диапазоне от -9223372036854775808 до 9223372036854775807. В базу данных оно отображается как BIGINT. Это поле подходит для хранения больших числовых значений, таких как идентификаторы в больших системах, временные метки в микросекундах или большие счетчики. Поле является наследником IntegerField и поддерживает все те же параметры, но с расширенным диапазоном значений.

При определении модели поле принимает стандартные аргументы: null, blank, default, db_index, unique и другие. По умолчанию поле не может быть пустым. Для валидации минимального и максимального значения используются параметры min_value и max_value.

Синтаксис

from django.db import models class MyModel(models.Model): big_int = models.BigIntegerField()

Пример

Создадим модель для хранения информации о заказах с большим количеством транзакций:

from django.db import models class Order(models.Model): order_id = models.BigIntegerField(unique=True, db_index=True) amount = models.BigIntegerField(default=0) user_id = models.BigIntegerField() created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"Order {self.order_id}"

Теперь создадим несколько записей с большими числовыми значениями:

from myapp.models import Order # Создаем заказы с большими ID и суммами order1 = Order.objects.create( order_id=1000000000000, amount=999999999999, user_id=123456789 ) order2 = Order.objects.create( order_id=1000000000001, amount=1500000000000, user_id=123456789 ) order3 = Order.objects.create( order_id=1000000000002, amount=750000000000, user_id=987654321 ) print(f"Orders created: {Order.objects.count()}")

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

"Orders created: 3"

Пример

Давайте выполним фильтрацию и агрегацию по полю BigIntegerField:

from myapp.models import Order from django.db.models import Sum, Max, Min, Avg # Находим заказы с суммой больше 1 триллиона large_orders = Order.objects.filter(amount__gt=1000000000000) print(f"Large orders: {large_orders.count()}") # Вычисляем статистику по сумме заказов для пользователя user_id = 123456789 stats = Order.objects.filter(user_id=user_id).aggregate( total=Sum('amount'), max_order=Max('amount'), min_order=Min('amount'), avg_order=Avg('amount') ) print(stats)

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

"Large orders: 1" {'total': 2500000000000, 'max_order': 1500000000000, 'min_order': 1000000000000, 'avg_order': 1250000000000.0}

Пример

Поле BigIntegerField также можно использовать с валидацией минимальных и максимальных значений:

from django.db import models class Product(models.Model): name = models.CharField(max_length=100) stock = models.BigIntegerField(min_value=0, max_value=1000000000000) def __str__(self): return self.name # Пример попытки создания с валидацией try: Product.objects.create( name="Test Product", stock=1500000000000 # Превышает max_value ) except Exception as e: print(f"Error: {e}")

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

"Error: stock value 1500000000000 is greater than max_value 1000000000000"

Пример

Поле BigIntegerField можно использовать для хранения временных меток в миллисекундах или микросекундах:

from myapp.models import Event import time class Event(models.Model): name = models.CharField(max_length=100) timestamp = models.BigIntegerField() data = models.JSONField() # Сохраняем событие с текущей временной меткой в микросекундах current_time = int(time.time() * 1000000) event = Event.objects.create( name="User Login", timestamp=current_time, data={"user_id": 12345, "ip": "192.168.1.1"} ) print(f"Event created with timestamp: {event.timestamp}") # Находим события за последний час one_hour_ago = (time.time() - 3600) * 1000000 recent_events = Event.objects.filter(timestamp__gte=int(one_hour_ago)) print(f"Recent events: {recent_events.count()}")

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

"Event created with timestamp: 1735075200000000" "Recent events: 1"

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

  • поле IntegerField,
    которое хранит 32-битные целые числа
  • поле PositiveBigIntegerField,
    которое хранит только неотрицательные большие целые числа
  • поле SmallIntegerField,
    которое хранит 16-битные целые числа
  • поле PositiveIntegerField,
    которое хранит только неотрицательные 32-битные целые числа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить