ORM (Object-Relational Mapping) позволяет работать с БД через Python-объекты без SQL.
CREATE — создание
# Метод 1: create()
task = Task.objects.create(title="Купить молоко", status="todo")
# Метод 2: save()
task = Task(title="Купить молоко", status="todo")
task.save()
# bulk_create — много объектов за один запрос
Task.objects.bulk_create([
Task(title="Задача 1"),
Task(title="Задача 2"),
Task(title="Задача 3"),
])
READ — чтение
Task.objects.all() # все записи
Task.objects.get(pk=1) # одна запись (исключение если нет)
Task.objects.filter(status='todo') # фильтр
Task.objects.exclude(status='done') # исключить
Task.objects.first() # первая
Task.objects.last() # последняя
Task.objects.count() # количество
Task.objects.exists() # bool: есть записи?
Фильтры (lookups)
Task.objects.filter(title__contains='молоко') # LIKE '%молоко%'
Task.objects.filter(title__icontains='молоко') # без учёта регистра
Task.objects.filter(title__startswith='Куп')
Task.objects.filter(created_at__date=today)
Task.objects.filter(priority__gt=5) # >
Task.objects.filter(priority__gte=5) # >=
Task.objects.filter(priority__lt=10) # <
Task.objects.filter(priority__in=[1, 2, 3]) # IN
Task.objects.filter(description__isnull=True) # IS NULL
UPDATE — обновление
# Один объект
task = Task.objects.get(pk=1)
task.status = 'done'
task.save()
# Много объектов (один SQL UPDATE)
Task.objects.filter(status='todo').update(status='in_progress')
DELETE — удаление
task = Task.objects.get(pk=1)
task.delete()
# Много объектов
Task.objects.filter(status='done').delete()
ORDER BY — сортировка
Task.objects.order_by('title') # по возрастанию
Task.objects.order_by('-created_at') # по убыванию
Task.objects.order_by('status', '-priority') # по нескольким
Цепочки QuerySet
# QuerySet ленивый — SQL выполняется только при итерации
tasks = (
Task.objects
.filter(status='todo')
.exclude(priority=0)
.order_by('-priority')
[:10] # LIMIT 10
)
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!