일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Machine Learning
- data preprocessing
- SQLD
- 레이블 인코딩
- PARTITION BY
- partition
- CROSS JOIN
- SQL
- ML
- django
- sklearn
- 사이킷런
- Cartesina Product
- 원핫인코딩
- 명령어
- 기본
- Python
- 머신러닝
- Today
- Total
Programming Blog
11. 장고 ORM과 쿼리셋(QuerySets) 본문
장고 ORM과 쿼리셋(QuerySets)
장고를 데이터베이스에 연결, 데이터를 저장하는 방법을 알아본다.
쿼리셋이란?
쿼리셋(QuerySet)은 전달받은 모델의 객체 목록이다.
쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 걸거나 정렬을 할 수 있다.
장고 쉘(shell)
로컬 콘솔에서 다음 명령을 입력한다.
1 | (myvenv) ~/djangogirls$ python manage.py shell | cs |
1 2 | (InteractiveConsole) >>> | cs |
이것은 장고 인터랙티브 콘솔(Interactive Console)로 들어온 것이다. 파이썬 프롬프트와 비슷하지만, 장고만의 마법을 부릴 수 있는 곳이기도 하다. 물론 파이썬의 모든 명령어도 사용 가능하다.
모든 객체 조회하기
글을 불러오고 먼저 입력했던 모든 글들을 아래와 같이 입력하여 출력한다.
1 | >>> from blog.models import Post | cs |
1 | >>> Post.objects.all() | cs |
그럼 포스트 했던 게시된 글 목록들이 나타난다.
근데 파이썬으로 새 글을 포스팅 하려면 다음과 같이 해야한다.
객체 생성하기
데이터베이스에 새ㅐ 글 객체를 저장하는 방법
1 | >>> Post.objects.create(author=me, title='Sample title', text='Test') | cs |
작성자로서 User(사용자) 모델의 인스턴스를 가져와 전달해줘야 하므로 먼저 User 모델을 불러온다.
1 | >>> from django.contrib.auth.models import User | cs |
데이터베이스에서 user는 어떤 역할인지 확인하는 코드는 아래와 같다
1 2 | >>> User.objects.all() <QuerySet [<User: ola>]> | cs |
슈퍼 유저로 등록했었던 사용자가 나온다 그 사용자의 인스턴스를 가져오는 코드는 아래와 같다.
1 | >>> me = User.objects.get(username='User이름') | cs |
사용자이름이 User이름 인 User 인스턴스를 받아왔다. 사용자 이름을 바꿨다면, 바뀐 이름을 넣어줘야 한다.
게시물 올리는 코드는 아래와 같다
1 | >>> Post.objects.create(author=me, title='Sample title', text='Test') | cs |
1 2 | >>> Post.objects.all() <QuerySet [<Post: my post title>, <Post: another post title>, <Post: Sample title>]> | cs |
1 2 | >>> Post.objects.filter(author=me) [<Post: Sample title>, <Post: Post number 2>, <Post: My 3rd post!>, <Post: 4th title of post>] | cs |
모든 글 중 제목(title) 에 'title'이라는 글자가 들어간 글들만을 뽑아내고 싶으면
※title과 contains 사이에 있는 밑줄은 2개이다. 장고 ORM은 필드 이름과 연산자와 필터를 밑줄 2개를 사용하여 구분한다.
게시글 목록을 볼 수 있다. 게시일(published_date) 로 과거에 작성한 글을 필터링하면 목록을 불러올 수 있다.
1 2 3 | >>> from django.utils import timezone >>> Post.objects.filter(published_date__lte=timezone.now()) [] | cs |
하지만 파이썬 콘솔에서 추가한 게시물은 보이지 않는다. 먼저 게시하려는 게시물의 인스턴스를 얻어야 한다.
1 | >>> post = Post.objects.get(title="Sample title") | cs |
1 | >>> post.publish() | cs |
다시 게시된 글의 목록을 가져온다.
1 2 | >>> Post.objects.filter(published_date__lte=timezone.now()) [<Post: Sample title>] | cs |
정렬 하기
쿼리셋은 객체 목록을 정렬할 수 있다. 이제 created_date 필드를 정렬할 것이다,.
1 2 | >>> Post.objects.order_by('created_date') [<Post: Sample title>, <Post: Post number 2>, <Post: My 3rd post!>, <Post: 4th title of post>] | cs |
- 을 맨 앞에 붙여주면 내림차순 정렬도 가능하다.
1 | >>> Post.objects.order_by('-created_date') | cs |
쿼리셋 연결하기
쿼리셋들을 함께 연결할 수 있다.
1 | >>> Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') | cs |
이 방법은 복잡한 쿼리도 작성할 수 있게 해준다
exit() 명령을 입력하여 쉘을 종료한다.
'Python' 카테고리의 다른 글
Python 정규표현식 사용 List (0) | 2021.09.01 |
---|---|
10. HTML 시작하기 (0) | 2019.01.25 |
9, 장고 뷰 만들기 (0) | 2019.01.25 |
8. 장고 urls (0) | 2019.01.25 |
7. 배포하기 (0) | 2019.01.24 |