model로 데이터베이스 처리하면 SQL쿼리문 없이도 데이터 처리 가능해진다.
실행시 나오는 메시지 중 일부에서 migration을 적용하면 데이터베이스와 관련된 admin, auth, contenttypes, sessions. 앱들을 사용 할 수 있다고 나온다.
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
*참고로 filename에서 board로 이름 변경함..
config/setting.py
데이터 베이스 엔진은 sqlite3, 해당 디렉토리에 'db.sqlite3 로 저장되어 있다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
1. migration을 적용하기
python manage.py migrate
2. ORM 활용하여 모델 만들기
앱/models.py에 ERD 설계에 맞춰서 모델을 클래스와 속성으로 넣어준다.
속성 https://docs.djangoproject.com/en/3.0/ref/models/fields/#field-types
3. 모델 생성
makemigrations
모델 생성/업데이트
python manage.py makemigrations
0001_initial.py생성됨
sqlmigrate
보드 앱에서 0001 작업파일의 쿼리를 조회
python manage.py sqlmigrate board 0001
migrate
쿼리문에 맞춰 테이블 생성
python manage.py migrate
4. 모델 CRUD
django shell 로 CRUD하기
4.0) django shell 실행
python manage.py shell
종료방법은 quit()
4.1 CREATE 생성하기
from board.models import Question, Answer
from django.utils import timezone
q = Question(subject='제목', content='내용을 넣어주세요', create_date=timezone.now())
q.save()
a = Answer(question=q, content='질문에 대한 답변 내용입니다.', create_date=timezone.now())
a.save()
print(q.id, q.subject , q.content , q.create_date)
# 1 제목 내용을 넣어주세요 2021-12-05 09:12:04.495313+00:00
#id는 모델 생성시에 자동으로 증가(autoincrement)하도록 설정함
4.2 READ 조회하기
Question.objects
#<django.db.models.manager.Manager object at 0x7f95fb000c10>
모델의 데이터는 모델.objects 를 통해서 조회
(1) 모든 데이터를 조회
모델.objects.all()
Question.objects.all()
#<QuerySet [<Question: Question object (1)>]>
#<QuerySet [<Question: 제목>]>
결과값: QuerySet 객체가 리턴 ( 포함하는 객체와 id 가 보인다.)
모델에__str__ 메서드 정의한 경우 id 값 대신 이제 제목이 표시
(2)id 조회
모델.objects.filter
해당하는 모든 데이터를 쿼리 셋에 리턴
Question.objects.filter(id=1)
<QuerySet [<Question: 제목>]>
모델.objects.get
유일한 값일 경우에만 가능하며 1개의 모델 객체만 리턴한
Question.objects.get(id=1)
#<Question: 제목>
외래키모델.연결된 모델명_set.all
정의된 속성은 아니지만 모델에 외래키로 연결된 모델로부터 접근 가능
q.answer_set.all()
#<QuerySet [<Answer: Answer object (1)>]>
(3) 단어 키워드 조회
모델.objects.filter(속성__contains= '키워드')
Question.objects.filter(content__contains='내용')
#<QuerySet [<Question: 제목>]>
Question.objects.filter(subject__contains='제')
#<QuerySet [<Question: 제목>]>
Question.objects.filter(subject__contains='와우')
<QuerySet []>
해당 키워드를 갖지 않으면 빈 쿼리셋을 리턴
4.3 UPDATE 수정
q= Question.objects.get(id=1)
q.subject='title'
q.content='your issues '
q.save()
q
#<Question: title>
4.4 DELETE 삭제
q= Question.objects.get(id=1)
q.delete()
Question.objects.all()
#<QuerySet []>
'CS > Web' 카테고리의 다른 글
사용자 에이전트(User Agent) 개요 및 구조 해석(브라우저,OS,기기) (0) | 2023.02.06 |
---|---|
[BE-Flask] 4. HTTP (0) | 2021.11.09 |
[BE-Flask] 3. 플라스크 템플릿 (0) | 2021.11.08 |
[BE-Flask] JWT(Json Web Token) (0) | 2021.11.05 |
[BE - Flask] 2. 라우팅(Routing) (0) | 2021.11.04 |