django가 model에 생긴 변화(필드를 추가했다던가 모델을 삭제했다던가 등) 반영하는 방법
Migration(이하 마이그레이션) 실행 및 DB 스키마를 다루기 위한 몇가지 명령어
makemigrations
migrate
sqlmigrate
showmigrations
model.py
python manage.py makemigrations
python manage.py migrate
어플리케이션.models.py
from django.db import models
# Create your models here.
class Article(models.Model) : # models.Model 클래스를 상속받음
## 데이터 베이스의 구조 작성
# column 만들기 ( primary key인 id는 django가 알아서 생성함 )
title = models.CharField(max_length=10) # charField : 길이에 제한이 있는 textfield에 대해서 사용
content = models.TextField()
어플리케이션.migrations
위치에 0001_initial.py
가 생김articles_articles
가 생성된 것을 확인할 수 있음어플리케이션이름_테이블이름
으로 이름이 지어짐python manage.py sqlmigrate 어플리케이션이름 테이블
from django.db import models
# Create your models here.
class Article(models.Model) : # models.Model 클래스를 상속받음
## 데이터 베이스의 구조 작성
# column 만들기 ( primary key인 id는 django가 알아서 생성함 )
title = models.CharField(max_length=10) # charField : 길이에 제한이 있는 textfield에 대해서 사용
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True) # auto_now_add = 작성일
updated_at = models.DateTimeField(auto_now=True) # auto_now = 수정일
현재 테이블이 완성되어있는 상태에서 2개의 column을 추가하려다보니 추가된 column 들에 해당하는 값을 뭐를 넣어줄지 물어봄
디폴트 값을 알아서 주기(시간은 추가가 어려우니 이번엔 이걸 선택)
나가서 models.py 에 직접 추가
0002_블라블라
의 migrations가 생김
DB
를 조작하기 위한 도구
django가 기본적으로 ORM을 제공함에 따른 것으로 DB를 편하게 조작할 수 있도록 도와줌
Model을 만들면 Django는 객체들을 만들고 읽고 수정하고 지울 수 있는 database-abstract API를 자동으로 만듦
database-abstract API 혹은 database-access API 라고도 함
DB API 구문
프로젝트.settings.py
에 추가INSTALLED_APPS = (
...
'django_extensions',
)
python manage.py shell
python manage.py shell_plus
대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능
Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말
밑에 부터는 python manage.py shell_plus
에서 진행됨
save()
는 model의 인스턴스 메서드이다.Article 테이블이 있는지 확인
Article 테이블의 요소 전부다 가져오기
article 에 Article 인스턴스를 담기
article 확인해보기
article의 title에 'first' 값 넣기
article.title 확인
잘못써서 에러남
article의 content 에 'django!' 넣기
article.content 확인
article 확인
article.save() : db에 저장이 됨
article 확인 : None 자리에 번호가 생긴것을 확인할 수 있음
테이블.objects.create(매개변수)
를 사용하여 인스턴스 생성 없이 바로 테이블 내에 데이터 저장
save() 할 필요가 없음
QuerySet API method를 사용한 다양한 조회를 하는 것이 중요
크게 2가지로 분류
Field lookups
all()
Article.objects.all()
# <QuerySet [<Article: Article object (1)>, <Article: Article object (2)>, <Article: Article object (3)>]>
get()
article = Article.objects.get(pk=2)
# <Article: Article object (2)>
# 없는 pk에 대한 것 조회시 에러- DoesNotExist
# 해당 컬럼에 대한 해당 값이 여러개가 있는 경우 에러 - MutipleObjectsReturned
filter()
Article.objects.filter(content="django!!")
# <QuerySet [<Article: Article object (2)>, <Article: Article object (3)>]>
검색에 특정 조건 넣어주기
테이블 뒤에 __
넣고 조건을 써줌
contains 이용 - 포함되어있는 것만
Article.objects.filter(content__contains="!")
#<QuerySet [<Article: Article object (1)>, <Article: Article object (2)>, <Article: Article object (3)>]>
gt 이용 - 해당 값보다 큰것만
Article.objects.filter(pk__gt=1)
#<QuerySet [<Article: Article object (2)>, <Article: Article object (3)>]>
django.contrib.auth
모듈에서 제공python manage.py createuser
를 통해서 admin/ admin 만들기auth_user
테이블에 관련 정보가 저장되게 됨좀더 보기 쉽게 하기 위해
어플리케이션.admin.py
를 수정from django.contrib import admin
from .models import Article # 현재 모델에서 article 테이블 가져오기
# Register your models here.
class ArticleAdmin(admin.ModelAdmin) :
list_display = ('pk', 'title', 'content', 'created_at', 'updated_at', ) # 현재 보일 column들을 tuple 혹은 list로 써주기
# admin site에 Article과 ArticleAdmin 을 등록하겠다.
admin.site.register(Article, ArticleAdmin)