티스토리 뷰
장고의 Making queries 문서를 정리합니다 ✏️
우선 여기서 말하는 쿼리문은 SQL 쿼리문이 아닙니다.
Model 을 만들면 장고는 자동으로 database-abstraction API를 제공합니다.
이 API를 통해서 create, retrieve, update, delete 쿼리문을 작성할 것입니다.
retrieve는 다음 글에 작성하고
이 글에서는 create, retrieve, update 만 살펴보겠습니다.
우선 장고의 DB 컨셉을 간단히 다시 보면 (참고: [Django] 튜토리얼 part 2 (1) - 모델, 데이터베이스)
model class는 database table,
model class의 instance는 database table의 각각의 record를 의미합니다.
그럼 이 모델을 예제로 살펴보겠습니다.
[1] Create
object를 만든 후, save() 해줍니다.
save를 꼭 해줘야합니다. ( "Django doesn’t hit the database until you explicitly call save()" )
그리고 save 메소드는 return value가 없습니다.
만약 create and save an object를 single step으로 하고 싶으면 create() method를 이용할 수 도 있습니다.
+ SQL 문의 INSERT랑 같습니다.
[2] Update
b5라는 Blog instance의 name을 바꾸는 작업입니다.
위와 마찬가지로 save를 꼭 해줘야합니다.
ForeignKey field를 업데이트 할 때도 normal field를 업데이트 할 때랑 동일합니다.
ManyToManyField field를 업데이트 할때는 조금 다릅니다. add() 메소드를 이용합니다.
add() 메소드로 multiple records를 한번에 추가할 수 도 있습니다.
+ SQL 문의 UPDATE 랑 같습니다.
[3] Delete
delete() 메소드를 이용합니다. (save 안해줘도 됩니다)
이 메소드는 즉각적으로 object를 지우고
숫자랑 딕셔너리를 반환하는데요 ,
지워진 objects의 갯수랑
Key는 '지워진 object의 타입' 이고 Value는 지워진 objects의 갯수인 딕셔너리를 반환합니다.
그리고 objects를 대량으로(in bulk) 지울 수 도 있습니다.
QuerySet 은 모든 멤버들을 지우는 delete() 를 가지고 있습니다.
(즉 Model과 Queryset 모두 delete 메소드가 존재합니다.)
예를들어 아래 코드처럼 pub_date year이 2005년인 모든 entry를 지울 수 있습니다.
5개가 지워졌다고 결과로 나오네요!
또다른 예제로 모든 entry를 지울 수 도 있습니다.
(retreive 글에서 나오겠지만 filter랑 all은 QuerySet을 반환합니다)
그리고 예제의 Entry처럼
ForeignKey 필드의 on_delete 설정을 CASCADE로 해놨다면
blog가 지워지면 이를 참조하고 있는
모든 entry도 다 지워집니다.
+ SQL 문의 DELETE 랑 같습니다.
'🐍 > Django' 카테고리의 다른 글
[Heroku] PostgreSQL DB Plan 업그레이드 (0) | 2021.05.12 |
---|---|
[Django] 쿼리문 (retrieve) (0) | 2021.03.21 |
[Django] 사용자에게 비밀번호 재설정 메일 보내기 (send password reset link) (3) | 2021.03.01 |
[Django] 장고, Heroku의 기본 DB 설정 살펴보기 (0) | 2021.01.13 |
[Heroku] Scheduler를 이용해서 반복 작업 돌리기 (0) | 2020.11.02 |
- Total
- Today
- Yesterday
- flutter dynamic link
- drf custom error
- ribs
- Watch App for iOS App vs Watch App
- 플러터 얼럿
- Flutter Spacer
- Flutter Clipboard
- 플러터 싱글톤
- ipad multitasking
- flutter 앱 출시
- Dart Factory
- Flutter Text Gradient
- Flutter 로딩
- Sketch 누끼
- SerializerMethodField
- Django Firebase Cloud Messaging
- METAL
- DRF APIException
- 장고 Custom Management Command
- flutter deep link
- cocoapod
- PencilKit
- Flutter getter setter
- Django FCM
- Python Type Hint
- Django Heroku Scheduler
- github actions
- 장고 URL querystring
- 구글 Geocoding API
- flutter build mode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |