[Django] 장고 ORM 쿼리 N+1 해결하기
·
Back/django
쿼리 N+1 문제쿼리 한번으로 N건의 데이터를 가져왔을때, 원하는 데이터를 얻기위해 N건의 데이터를 가져온 데이터 수만큼 반복해서 2차적으로 쿼리를 수행하는 성능 이슈해결 방법 : Eager-loadinglazy-loading를 피해야 한다.lazy-loading 이란 django에서 ORM을 작성할때, queryset에 담겨있는 데이터를 이용할 때에 SQL문을 호출하는 것django는 이러한 성능 문제를 해결할 수 있도록 Lazy-loading방식을 피하고 Eager-loading방식으로 바꾸는 두가지 방법을 제공함. select_related() 와 prefetch_related()다. 두 메서드 모두 ORM(객체 관계 매핑)을 사용할 때 성능 최적화를 위해 사용되는 method이다. 두 method..
[Django] 일대일관계로 User 모델 확장하기
·
Back/django
일대일관계로 User 모델 확장하기로그인, 권한 부여 등과 상관이 없는 사용자 정보 필드를 저장할 때 사용.# models.pyfrom django.db import modelsfrom django.contrib.auth.models import Userfrom django.db.models.signals import post_savefrom django.dispatch import receiverclass Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) introduction = models.TextField(default="안녕하세요", blank=True, ..
[Django] models.py 정리
·
Back/django
Models장고에서 'models'는 DB와의 상호 작용을 정의하는 데 사용함.DB 테이블 구조를 정의, 해당 테이블과 상호 작용할 수 있는 파이썬 클래스각 모델은 단일 DB 테이블에 매핑클래스를 통해 DB의 테이블을 생성하고 쿼리를 실행하여 데이터를 검색, 추가, 업데이트 및 삭제 가능Models Doc DjangoThe web framework for perfectionists with deadlines.docs.djangoproject.com예시from django.db import modelsclass Musician(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_le..
[Django] Django 프로젝트 시작하기 위한 기본 명령어
·
Back/django
Django 설치pip install djangopython도 설치Django 프로젝트 만들기django-admin startproject 프로젝트명프로젝트 생성python manage.py makemigrations # 1번python manage.py migrate # 2번1. makemigrations모델의 변경 사항을 추적하여 데이터베이스 마이그레이션 파일을 생성모델 클래스를 수정하거나 새로운 모델을 추가한 경우, 이 변경 사항을 데이터베이스에 적용할 수 있도록 마이그레이션 파일을 생성db.sqlite3 파일 생성2. migratemakemigrations에서 생성된 마이그레이션 파일을 기반으로 데이터베이스 스키마를 변경데이터베이스에 적용되지 않은 마이그레이션들이 실행되어 실제 데이터베이스의 스키..