Python Разработка | Web Backend, Парсинг & Telegram Bots. Пайтон программирование с нуля. Django, FastAPI и SQL. Уроки для начинающих и IT карьера. Coding.

@BookPython
Фото Оптимизация SQL-запросов в Django ORM Сегодня я покажу вам, как оптимизировать SQL-запросы в Django ORM, чтобы ваш код работал быстрее и эффективнее. Если ваш Django-проект начал тормозить, скорее всего, проблема в количестве и сложности запросов к базе данных. 1️⃣ Используйте select_related и prefetch_related Django ORM лениво загружает связанные объекты, что может привести к множественным SQL-запросам (N+1). Вместо этого используйте: # select_related — жадная загрузка (для ForeignKey, OneToOne) posts = Post.objects.select_related("author").all() # prefetch_related — для ManyToMany и Reverse ForeignKey posts = Post.objects.prefetch_related("comments").all()Это значительно уменьшает количество запросов к базе. 2️⃣ Используйте only и defer Если вам не нужны все поля модели, загружайте только необходимые: users = User.objects.only("id", "username") # Загружаем только ID и имя А если хотите исключить несколько полей: users = User.objects.defer("bio", "last_login") # Исключаем ненужные поля 3️⃣ Агрегация вместо перебора в Python Вместо: total_likes = sum(post.likes.count() for post in posts) Используйте annotate: from django.db.models import Count posts = Post.objects.annotate(total_likes=Count("likes"))Это выполнится на стороне базы, а не в Python, что намного быстрее. 4️⃣ Используйте exists() вместо count() Если вам нужно проверить, есть ли записи в базе, не используйте count(), это дорогостоящий запрос: if User.objects.filter(email="test@example.com").exists(): # Быстро ❌ Плохо: if User.objects.filter(email="test@example.com").count() > 0: # Долго 5️⃣ Кешируйте запросы Django поддерживает кеширование, и если запросы повторяются, можно использовать: from django.core.cache import cache users = cache.get("users") if not users: users = list(User.objects.all()) # Загружаем пользователей cache.set("users", users, timeout=60 * 15) # Кешируем на 15 минут Эти простые приемы помогут вам ускорить Django-приложение и уменьшить нагрузку на базу данных. 👉 @BookPython
Если у вас установлено приложение,
вы можете сразу перейти в канал