Zero Coding 2022. 6. 25. 09:00

1. ORM (Object-relation Mapping) 이해

  • 원래 서버에서 DB를 다루기 위해서는 Database 언어를 따로 다뤄야 하지만 이를 Object-relation의 Mapping으로 처리
  • 클래스(Class)를 이해해야하는데, 클래스란 가지고 있어야하는 속성과 특징을 변수와 함수의 코드 집합 으로 정의
  • a = A() 와 같은 방식으로 사용. 여기서 a는 A()클래스에 의해 객체가 되는데, A 클래스의 인스턴스라고도 부름
  • A라는 테이블에서 각각의 필드를 "A테이블이라면 가지고 있어야하는 속성" 으로 보고, A 테이블에 있는 데이터들을 각각 "A 클래스의 인스턴스로" 규정하고 코딩하면 됨. 즉, DB테이블(Table) = 파이썬 클래스(Class) 로 보면된다!

2. TABLE 만들기

  • 각 App패키지의 model.py에 아래와 같이 설정
  • django.db 패키지로부터(from) models 모듈을 불러들어(import) 각 클래스들을 호출하여 사용
  • acc.models 의 모듈로부터(from) User 클래스를 불러들어(import) 상속받아 사용
  • 작업이 완료되면 Migration을 통해 Table을 DB에 등록해주어야 함
from django.db import models
from acc.models import User

class Book(models.Model):
    site_name = models.CharField(max_length=100)
    site_url = models.TextField()
    content = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    impo = models.BooleanField(default=False)
    pubdate = models.DateTimeField()

 

3. DB 등록하기

  • Table 을 DB 에 올리기 전에 config 패키지 settings.py 모듈의 INSTALLED_APPS 변수 List에 해당 App을 먼저 추가해주어야함.
  • 이후 터미널에서 아래와같이 makemigrations와 migrate를 수행해줌
  • python manage.py makemigrations
    settings.py 의 INSTALLED_APPS 에 있는 내용들을 점검하여 DB와 관련하여 변화가 일어났는지 체크한뒤, 변화가 있다면 DB 에 올릴 준비를 해주는 파일인 0001 과 같은 파일을 생성 시킴
  • python mange.py migrate
    makemigrations가 있는 상태에서 실제로 DB를 등록하는 명령어
C:\Project> python manage.py makemigrations
C:\Project> python manage.py migrate

 

4. DB에 직접 데이터 추가하기

  • 터미널에서 python manage.py shell 입력하여 shell 모드로 들어가 줌
  • shell 에서 아래와 같이 레코드를 추가
C:\Project> python manage.py shell

>>> from book.models import Book

>>> book1 = Book(size_name='google', site_url='www.google.com', content='Search Engine')
>>> book1.save()
>>> book2 = Book(size_name='coupang', site_url='www.coupang.com', content='Shopping Mall')
>>> book2.save()
>>> book3 = Book(size_name='intertour', site_url='www.intertour.com', content='Travel')
>>> book3.save()

 

5. 데이터 조회하기

  • 아래와 같이 shell에서 객체를 생성하여 불러오는 방식으로 진행할 수 있음
# 레코드 전부 불러오기
>>> all_book = Book.objects.all()
>>> for i in all_book:
	print(i.site_name, i.site_url, i.site_content)
 
# 특정 인스턴스 검색
>>> a = Book.objects.get(site_name="google")
>>> print(a.site_name, a.site_url, a.site_content)