ORM(Object-Relational-Mapping) ?????
- 쉽게말해서 파이썬으로 데이터베이스를 조작할 수 있게 해줌
여러가지 장단점이 있음
Django Shell
- django 가 제공하는 여러가지 기능을 명령어로 입력해서 실행해볼수 있는 Shell 환경
python manage.py shell
위에 코드를 터미널에 입력하면 현재 Django 프로젝트 환경을 Shell로 접근할 수 있게 해준다,
하지만 저걸 하기 전에 선행되어야 하는 작업이 있는데
pip install django-extensions
Django 기본 Shell보다 더 많은 기능이 있는 shell_plus를 제공

이렇게 까지 설정 이후에 아래 것 까지 추가
pip install ipython
이거는 ipython은 python 기본 Shell에 여러가지 기능을 더한것이다( 자동완성, 코드 색상 강조와 같은 기능 )
이후 저 두개의 패키지를 install 한 후 pip freeze > requirements.txt 를 해준다
python manage.py shell_plus
이제 shell 을 시작할때는 바로 위에 있는것을 사용하면 된다.


Article.objects.all() = 모든 정보를 조회하라는 의미 (article은 클래스 이름, objects 는 매니저(하인같은 녀석), .all()은 QuerysetAPI 이다.)
솔직히 <QuerySet []> 이게 안되가지고 거의 1시간을 다시 처음부터 만들었다.... 쉣
<QuerySet []> = 데이터베이스에서 조회한 정보들이 모여있는 객체
<QuerySet []> 안에 [] 요 친구는 반복이 가능 list 처럼 접근도 가능함
Article 생성방법(여러가지가 있음)
article = Article()
article.title = 'first_title'
article.content = 'my_content'
# 여기에서 전체 Article을 조회해보면
Article.objects.all() # 비어있다
# save()하기전에는 저장되지 않음
article.save()
# 다시 전체 Article을 조회해보면 하나의 아티클이 있음
Article.objects.all()
Article.objects.create(title='third title', content='마지막 방법임')
# save()가 필요하지 않음
STR 사용하기
class Article(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
def __str__(self):
return self.title
이것을 사용하는 이유는 저걸 사용하지 않으면 <Article: Article object (1)> 이런 형식으로 나오기 때문에 보기에 불편하고, 다른사람이 보면 이게 뭔지 모를수도 있다. 그래서 저걸 사용하고 조회를 하면

하나만 조회하기
Article.objects.get(id=1)
딱 1개의 조회가 필요할 때 사용, 조건에 해당하는 객체가 없다면 DoesNotExist 예외를 발생시킴,
한 개 이상의 객체가 리턴될 경우도 MulipleObjectReturned 예외를 발생시킴
이걸 방지 하기 위해서는 예외처리를 해야함(아직 안배워서 나중에 배우면 올리겠습니다 ㅎㅎ;;)
조건으로 조회하기
lookup과 일치하는 객체를 모두 리턴
일치하지 않는다면 빈 쿼리셋을 리턴합니다.
Article.objects.filter(id__gt=2) # 2보다 큰 id
Article.objects.filter(id__in=[1,2,3]) # 1,2,3에 속하는 id
Article.objects.filter(content__contains='my') # content에 'my'가 포함된
수정하기
1. 수정할 객체를 조회
2. 수정할 내용을 입력
3. 수정한 것을 데이터베이스에 반영
article = Article.objects.get(id=1)
article.title = 'updated title'
article.save()
삭제하기
article = Article.objects.get(id=2)
article.delete()