django ORM

Jinhyeon Son·2020년 4월 6일
0

정리

목록 보기
10/17

이해

  • Object Relational Mapping
  • OOP언어와 DBMS사이의 간극을 메꾸기 위한 인터페이스
  • 객체 개념을 통해 DB에 접근, 사용할 수 있다

모델

Django 모델은 "django.db.models.Model" 의 파생 클래스이며,
모델의 필드는 클래스의 멤버로 표현되는 테이블의 필드에 해당한다

특징

      테이블의 필드는 클래스 멤버 변수로 표현되는데 이 때 클래스 멤버변수는 
      이름에 해당하는 값을 가지는것이 아니라 필드의 메타 데이터를 정의한다

필드 타입

    자주 사용하는 필드값에 대한 정리
    
  • CharField(max_length=None, **options) : small to large size string을 위한 필드
    options

    • null : CharField와 TextField 모두에서 사용가능한 옵션으로 True로 설정시 필드가 null값을 가질 수 있다
  • TextField(**options) : large text field, Textarea 위젯에 대응한다
    max_length 옵션을 지정하면 Textarea 위젯에 반영된다

  • IntegerField(**options) : -2147483648 부터 2147483647 사이의 값(signed int)을 위한 필드

  • DecimalField(max_digits=None, decimal_places=None, **options) : 고정 소수점 값을 위한 필드
    options

    • max_places : 저장할 소숫점 자리 수
    • max_digits : 소숫점 자리를 포함한 최대 자리수
      ex ) DecimalField(max_digits=5, decimal_places=2)객체는 백의자리수 + 소수점 두번째 자리수 까지 기록 가능하다
  • BooleanField(**options) : true/false 필드
    Null/true/false 필드를 사용하고 싶을 경우 NullBooleanField를 사용한다

  • DateTimeField(auto_now=False, auto_now_add=False, **options) : 날짜와 시간을 위한 필드
    내부적으로 파이썬의 datetime.datetime를 호출한다
    options

    • auto_now : 객체에서 save() 메소드가 호출될 때마다 현재시간으로 최신화시키는 옵션
    • auto_now_add : 객체가 처음 생성되었을 때의 현재시간을 자동으로 저장하는 옵션
  • BinaryField(**options) : raw binary를 저장하는 데이터 타입으로 제한된 기능성을 갖는데
    예를 들어 객체에 대한 filter를 사용할수 없다

  • FileField(upload_to=None, max_length=100, **options) : 파일 업로드를 위한 필드
    options

    • upload_to : 업로드 디렉토리와 파일 이름을 정하는 옵션
  • ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options) :
    파일 필드를 상속받는 필드이나 객체가 유효한 이미지인지 검증한다
    ImageField의 객체는 DB안에서 max_length=100인 varchar 필드이다
    options

    • height_field : 객체가 save 되었을때 이미지의 높이에 따라 자동 생성되는 필드
    • width_field : 객체가 save 되었을때 이미지의 넓이에 따라 자동 생성되는 필드

Query Method

INSERT

  • save() : test_table.save()

    save() 메서드가 호출되면, SQL의 INSERT이 생성되고 실행되어 테이블에 레코드가 추가된다.

SELECT & UPDATE

Django는 디폴트로 모든 Django 모델 클래스에 대해 "objects" 라는 
Manager (django.db.models.Manager) 객체를 자동으로 추가한다
이 objects 매니저를 통해 SQL의 SELECT 구문을 구현할 수 있다
  • all() : 테이블에 존재하는 모든 레코드를 가져오는 메소드

  • get() : 하나의 레코드만을 가져오기 위한 메소드

  • filter() : 특정 조건에 맞는 레코드를 가져오기 위한 메소드

  • exists() : 객체가 존재하는지 확인하는 메소드

    	ex ) rows = Feedback.objects.filter(name='Kim')
  • exclude() : 특정 조건에 맞는 레코드를 제외하는 메소드

    	ex ) rows = Feedback.objects.exclude(name='Kim')
  • count() : 레코드의 갯수를 세어 리턴하는 메소드

  • order_by() : 레코드를 인자에 따라 정렬하기 위한 메소드

    	ex ) rows = Feedback.objects.order_by('id', '-createData')
    	위와 같이 호출하면 id를 통한 올림차순, createData필드를 통해 내림차순으로 정렬된다
  • distinct() : 대상 객체의 중복값을 제거한다

    	ex) rows = Feedback.objects.distinct('name')
    	위와 같이 호출하면 Feedback 객체에서 'name' 필드가 중복값을 가진 레코드를 제외하고 가져온다
  • first() : 객체에서 첫번째 레코드를 리턴하는 메소드

    	ex) rows = Feedback.objects.order_by('name').first()
    	위와같이 호출하면 'name' 필드로 정렬했을때 첫번째 레코드를 리턴한다
  • last() : 객체의 마지막 레코드를 리턴하는 메소드

위 SELECT 구문에 해당하는 Query method들은 데이터를 직접 리턴하는것이 아니라
QuerySet이라는 객체를 리턴하는데 이로 인해 여러 메소드들을 체인처럼 연결하여 사용할 수 있다

	row = Feedback.objects.filter(name='Kim').order_by('-id').first()

DELETE

save() 메소드와 같이 객체에서 delete() 메소드를 실행한다

0개의 댓글