관리 메뉴

Storage Gonie

Django (16) Model에 대한 이해 및 Model Operations 본문

웹개발/인스타 클론 (1) Django

Django (16) Model에 대한 이해 및 Model Operations

Storage Gonie 2019. 6. 25. 15:11
반응형

장고의 Models

- Model은 Python 클래스이다.
- Model은 앱에서 사용되는 데이터의 타입을 설명해준다.
- 장고는 자동으로 Model을 번역해서 Database에 Table을 생성한다.(ORM)
https://docs.djangoproject.com/en/1.11/topics/db/models/

- 레스토랑 장고 프로젝트를 진행한다면,
   Costumer 모델과 Restaurant 모델은 기능이 완전히 다르기 때문에 다른 앱에 넣어줘야 한다.


# Fields란 무엇인가
- Fields는 장고와 DB에게 어떤 종류의 데이터를 저장할 것인지 알려준다.
- 나이는 숫자, 이름은 텍스트. 이런게 장고의 field이다.
- Fields는 잘못된 입력을 저장하려고 할 때 알려주기도 한다.
  ex) 나이 필드에는 숫자만 저장될 수 있는데 텍스트를 입력한 경우 에러 발생시킴
   

# Model 정의하는 방법
- models를 import해서 이를 상속받아 클래스를 정의하면 된다.

- Cat모델은 name, breed 필드를 가진다.

from django.db import models

class Cat(models.Model)
    name = models.CharField(max_length = 30)
    breed = models.CharField(max_length = 20)

정의한 뒤, 장고를 실행하면 장고는 우리가 정의한 모델을 자동으로 불러와 다음과 같은 테이블을 데이터베이스에 생성한다.
(이 때 장고 덕분에 정의하지 않았던 id필드가 디폴트로 자동생성된다. 왜냐하면 오브젝트를 ID로 정렬해야하기 때문에)

Model Operations(API)

- Django는 다양한 데이타베이스 API 들을 제공한다.
- 이러한 기능은 Django가 ORM 서비스를 기본적으로 제공함에 따른 것으로 데이타베이스를 편리하게 핸들링할 수 있게 도와준다.

- 아래의 API들을 사용하면 장고는 이를 모두 SQL로 번역한다.
http://pythonstudy.xyz/python/article/310-Django-%EB%AA%A8%EB%8D%B8-API

 

# CREATE
@ create()

- 하나의 row를 생성함
- 정의한 모델에 대해서 오브젝트를 생성하는 것.

Cat.objects.create(name = "Mr.Fluffy", breed="Persian")
Cat.objects.create(name = "Mr.Bunns", breed="British")
Cat.objects.create(name = "Conrad", breed="Siamese")
Cat.objects.create(name = "Shishi", breed="British")
Cat.objects.create(name = "Conrad", breed="Persian")

# SELECT

@ get()
- 하나의 row만 가져오기 위한 연산

cat = Cat.objects.get(id=1) // id는 Primary key인데 이것이 1인 row를 불러옴

@ all()

- 모든 row를 불러오기 위한 연산

cats = Cat.objects.all() // 모든 row를 불러옴

@ filter()
- 조건에 맞는 여러 row를 한번에 불러오기 위한 연산
- filter의 Lookup Options은 아래와 같은 것들이 있음(좀 더 세밀하게 조건을 줄 수 있는 방법)
- startswith(대소문자를 구분O, 특정 문자로 시작하는)
- contains(대소문자를 구분O, 특정 문자를 포함하고 있는)
- istartswith(대소문자 구분X, 특정 문자로 시작하는)
- icontains(대소문자 구분X, 특정 문자를 포함하고 있는)
- lt(less than)

- gt(greater than) 등등

british_cats = Cat.objects.filter(breed="British") // breed 필드의 값이 British인 것을 모두 불러옴

british_cats = Cat.objects.filter(name__startswith="Mr") // name 필드가 Mr로 시작하는 고양이를 모두 불러옴

# UPDATE

@ save()

cat = Cat.objects.get(id=1) // id는 Primary key인데 이것이 1인 row를 불러옴
cat.name = "Fluffy"
cat.save()

# DELETE

@ delete()

cat = Cat.objects.get(id=1) // id는 Primary key인데 이것이 1인 row를 불러옴
cat.delete()

반응형
Comments