(4) Django 모델 작업

5084 단어 django
모델 작업
모델이 자주 사용하는 조작에 대응하는 것은 데이터베이스에서의 삭제와 수정이다
참조 문서
https://docs.djangoproject.co...
샘플 파일
from django.db import models

class Students(models.Model):
    """   """
    username = models.CharField(max_length=64, null=False, unique=True)
    age = models.IntegerField()
    cls = models.ForeignKey('ClassInfo', on_delete=models.DO_NOTHING)


class ClassInfo(models.Model):
    """   """
    title = models.CharField(max_length=64, null=False, unique=True)
    teachers = models.models.ManyToManyField("Teachers")


class Teachers(models.Model):
    """   """
    name = models.CharField(max_length=16, null=False, unique=True)

1. 싱글 테이블 작업
1.1 데이터 증가
  • 첫 번째 방식
  • obj = models.Students(username='  ', cls_id='1')
    obj.save()
  • 두 번째 방식
  • models.Students.objects.create(username='  ', cls_id='1)

    1.2 데이터 조회
  • get 수령
  • #   id 1   
    models.Students.objects.get(id='1')
  • Filter 획득
  • #   id=1   
    obj = models.Students.objects.filter(id='1')
    #       19   
    obj = models.Students.objects.filter(age__gt=19)
    #       19  22   
    obj = models.Students.objects.filter(age__gt=19, age__lt=22)
    #   id [1, 3, 5, 6]   
    obj = models.Students.objects.filter(id__in=[1, 3, 5, 6])
    #       “ ”   
    obj = models.Students.objects.filter(username__contains==' ')
    
  • all() 모두 조회
  • stu_list = models.Students.objects.all()  #      ,      
  • vlaues
  • stu_list = models.Students.objects.values()   #      ,      ,    ,      
  • vlaues_list
  • stu_list = models.Students.objects.values_list()   #      ,      

    1.3 데이터 수정
  • update
  • #   id 1      
    obj = models.Students.objects.filter(id='1') #       id 1   
    obj.update(cls_id=2) #   update       

    1.4 데이터 삭제
    #   id 1      
    obj = models.Students.objects.filter(id='1') #       id 1   
    obj.delete() #   delete()   

    1.5 쿼리 세트
    질의 함수
    함수명
    기능
    반환값
    설명
    get
    테이블에 충족된 데이터 중 하나만 반환
    반환 값은 모델 클래스의 대상입니다
    매개 변수에 조회 조건을 씁니다. 1) 여러 개의 데이터를 찾으면 비정상적인MultipleObjectsReturned를 던집니다.2) 데이터가 조회되지 않으면 버퍼링 예외: DoesNotExist
    all
    모델 클래스에 대응하는 표의 모든 데이터를 되돌려줍니다.
    반환 값은QuerySet 유형입니다.
    조회 집합
    filter
    충족된 데이터를 반환합니다.
    반환 값은QuerySet 유형입니다.
    매개 변수 쓰기 쿼리 조건.
    exclude
    부적합한 데이터를 반환합니다.
    반환 값은QuerySet 유형입니다.
    매개 변수 쓰기 쿼리 조건.
    order_by
    질의 결과를 정렬합니다.
    반환 값은 QuerySet 유형 매개 변수에서 어떤 필드에 따라 정렬되는지 기록합니다.
    all, filter, exclude, order_by 이 함수들을 호출하면 쿼리 세트가 생성됩니다.QuerySet 클래스 대상은 위의 모든 함수를 계속 호출할 수 있습니다.
    조회 집합 특성 1) 타성 조회: 조회가 집중된 데이터를 실제로 사용할 때만 데이터베이스에 대한 진정한 조회가 발생한다.2) 캐시: 같은 조회 집합을 사용할 때 처음 사용할 때 실제 데이터베이스에 대한 조회가 발생하고 결과를 캐시한 다음에 이 조회 집합을 사용할 때 캐시에 있는 결과를 사용한다.3) 목록과 같은 쿼리 집합의 결과를 제한하기 위해 쿼리 집합을 낙찰하거나 슬라이드할 수 있다.하나의 쿼리 집합을 슬라이드하면 새로운 쿼리 집합이 생성되며, 아래 표시는 마이너스로 허용되지 않습니다.
    2 .연관 작업
    2.1 일대다 작업
    학생과 학급은 일대다 관계로, 한 학생은 한 학급에 대응하고, 한 학급은 여러 학생에 대응한다.
    학생을 통해 반의 타이틀을 찾다
    stu_obj = model.Stuents.objects.get(id=1)
    cls_title = stu_obj.cls.title
    
    ##         
    cls_obj = model.Stuents.objects.filter(id=1).values_list("classinfo__title")

    1학년 1반의 모든 학생을 조회하다
    cls_obj = models.ClassInfo.objects.filter(title='1  1 ')
    stu_list = cls_obj.students_set.all()

    2.2 멀티태스킹
    create
    #  1  1       
    cls_obj = models.ClassInfo.objects.filter(title='1  1 ')
    cls_obj.teachers.create(name='   ')

    add
    #   id 1     1  1 
    cls_obj = models.ClassInfo.objects.filter(title='1  1 ')
    teacher_obj = models.Teachers.filter(id=1)
    cls_obj.teachers.add(teacher_obj)  
    #        
    teacher_list = models.Teachers.filter(id__in = [1, 2, 3, 4, 5])
    cls_obj.teacher.add(*teacher_list)
    #        id
    cls_obj.teacher.add(1)

    remove 삭제
    #  1  1    id 1   
    cls_obj = models.ClassInfo.objects.filter(title='1  1 ')
    cls_obj.teachers.remove(1)
    #       
    teacher_obj = models.Teachers.filter(id=1)
    cls_obj.teachers.remove(teacher_obj)  

    1학년 1반 선생님
    cls_obj = models.ClassInfo.objects.filter(title='1  1 ')
    teachers_list = cls_obj.teachers.all()

    3. 집합 및 그룹 구성
    취합
    집계 작업은 다음과 같습니다.
    sum count avg max min
    aggregate: 이 함수를 호출해서 집합을 사용합니다.되돌아오는 값은 사전을 사용하기 전에 집합 클래스를 가져와야 한다. 다음과 같은 예는
    from django.db.models import Sum,Count,Max,Min,Avg
    #        
    stu_count = models.Stuents.objects.all().aggregate(Count('id'))  
    

    조를 나누다
    그룹화annotate 사용()
    #              
    models.ClassInfo.objects.all().annotate(teacher_num=Count("teachers"))

    좋은 웹페이지 즐겨찾기