์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋ ์์ฃผ๋ก ์ค๋ช
ํฉ๋๋ค. ์์ธ ๋ด์ฉ์ Django์ QuerySet API reference๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
1. DATA
sample data๋ฅผ ๊ฐ์ง๊ณ ์ค๋ช
๋๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค.
from django.db import models class Notice(models.Model): title = models.CharField(max_length=100) likeCount = models.IntegerField() viewCount = models.IntegerField() contents = models.TextField() def __str__(self): return f'์ ๋ชฉ : {self.title}, ์ข์์ ์ : {self.likeCount}, ์กฐํ์ : {self.viewCount}'
๋ณด๊ธฐ ์ฝ๊ฒ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์์
๋ก ์ฎ๊ฒจ๋ณด์์ต๋๋ค. ํ์ฌ data์
๋๋ค.

2. ORM
ORM์ด๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ชจ๋ธ ํด๋์ค์ DB์ ์์ฑ๋ ํ
์ด๋ธ์ ์๋์ผ๋ก ์ฐ๊ด์ง์ด ์ฃผ๋ ๊ธฐ์ ๋ก ์ฐ๋ฆฌ๊ฐ DB๋ฅผ ์ง์ ์กฐ์ํ ํ์ ์์ด ๋ชจ๋ธ ํด๋์ค์ python ๋ฌธ๋ฒ์ ํตํด์ DB๋ฅผ ์กฐ์ํ ์ ์๋ ํธ๋ฆฌํ ๊ธฐ์ ์
๋๋ค.
ย
# python manage.py shell
2.1. ์กฐํ
all, filter, exclude, get, count, first, last, exists(๋ฐ์ดํฐ์ ์ ๋ฌด, True, False๋ก ๋ฐํ), order_by(์ ๋ ฌ), reverse ๋ฑ์ด ์์ต๋๋ค.
๋ค์ค๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด union, intersection, difference๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
all
๋ชจ๋ ์์์ ์ ๊ทผํ ๋ ์ฌ์ฉํฉ๋๋ค.
>>> from main.models import Notice >>> Notice.objects.all() <QuerySet [<Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2>, <Notic e: ์ ๋ชฉ : test title 2, ์ข์์ ์ : 2, ์กฐํ์ : 4>, <Notice: ์ ๋ชฉ : test ti tle 3, ์ข์์ ์ : 3, ์กฐํ์ : 6>, <Notice: ์ ๋ชฉ : test title 4, ์ข์์ ์ : 4, ์กฐํ์ : 8>, <Notice: ์ ๋ชฉ : test title 5, ์ข์์ ์ : 5, ์กฐํ์ : 10> ]> >>> Notice.objects.all().order_by('-pk') <QuerySet [<Notice: ์ ๋ชฉ : test title 5, ์ข์์ ์ : 5, ์กฐํ์ : 10>, <Noti ce: ์ ๋ชฉ : test title 4, ์ข์์ ์ : 4, ์กฐํ์ : 8>, <Notice: ์ ๋ชฉ : test t itle 3, ์ข์์ ์ : 3, ์กฐํ์ : 6>, <Notice: ์ ๋ชฉ : test title 2, ์ข์์ ์ : 2, ์กฐํ์ : 4>, <Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2> ]> >>> Notice.objects.all().count() 5
ย
get
ํน์ ์์๋ฅผ ์ ํํ ์๊ณ ์์ ๋ ์ฌ์ฉํฉ๋๋ค. ์์์ ์ ๊ทผํ ๋์๋ ์ ์ ์ฌ์ฉํฉ๋๋ค.
>>> q = Notice.objects.get(id=1) >>> q <Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2> >>> q = Notice.objects.get(pk=1) >>> q <Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2> >>> q.id 1 >>> q.title 'test title 1' >>> q.viewCount 2
filter
,exclude
์ ๋งค์๋๋ ์ด์ด ๋ถ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. filter().exclude().filter().exclude() ์ฒ๋ผ์. filter๋ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ ๋ฐํํ๊ณ , exclude๋ ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ฐ์ฐ์๋ฅผ ๋ถ์ผ ๋์๋ __(์ธ๋๋ฐ 2๊ฐ)๋ฅผ ๋ถ์
๋๋ค. ์ฐ์ฐ์์ ์ข
๋ฅ๋ contains(ํฌํจ), in(๋ค์ค ์กฐ๊ฑด ํฌํจ), exact, iexact, gt(>), lt(<), gte(>=), lte(<=), startswith(์์ ๋งค์นญ), endswith(๋ค์ ๋งค์นญ), range(๋ฒ์), date, year, month, day, week, week_day, quarter, time, hour, minute, second, regex ๋ฑ์ด ์์ต๋๋ค.
get์ filter๋ก๋ ์ก์๋ผ ์ ์์ต๋๋ค.
>>> Notice.objects.filter(title='test') <QuerySet []> >>> Notice.objects.filter(title='test title 1') <QuerySet [<Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2>]> >>> Notice.objects.filter(id=1) <QuerySet [<Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2>]> >>> Notice.objects.filter(viewCount=4) <QuerySet [<Notice: ์ ๋ชฉ : test title 2, ์ข์์ ์ : 2, ์กฐํ์ : 4>]> >>> Notice.objects.filter(title__contains='test') <QuerySet [<Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2>, <Notic e: ์ ๋ชฉ : test title 2, ์ข์์ ์ : 2, ์กฐํ์ : 4>, <Notice: ์ ๋ชฉ : test ti tle 3, ์ข์์ ์ : 3, ์กฐํ์ : 6>, <Notice: ์ ๋ชฉ : test title 4, ์ข์์ ์ : 4, ์กฐํ์ : 8>, <Notice: ์ ๋ชฉ : test title 5, ์ข์์ ์ : 5, ์กฐํ์ : 10> ]>
์ข ๋ ์ธ๋ถ์ ์ผ๋ก filter๋ ์๋ ๋ฌธ๋ฒ์ ๋ฐ๋ฆ
๋๋ค.
>>> Notice.objects.filter(title='test title 1') <QuerySet [<Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2>]> >>> Notice.objects.filter(likeCount__lt=3) <QuerySet [<Notice: ์ ๋ชฉ : test title 1, ์ข์์ ์ : 1, ์กฐํ์ : 2>, <Notic e: ์ ๋ชฉ : test title 2, ์ข์์ ์ : 2, ์กฐํ์ : 4>]> >>> Notice.objects.filter(likeCount__gt=3) <QuerySet [<Notice: ์ ๋ชฉ : test title 4, ์ข์์ ์ : 4, ์กฐํ์ : 8>, <Notic e: ์ ๋ชฉ : test title 5, ์ข์์ ์ : 5, ์กฐํ์ : 10>]> # Notice.objects.filter([ํ๋๋ช ]=value) # Notice.objects.filter([ํ๋๋ช ]__[์กฐ๊ฑด]=value)
2.2. ์์ฑ
>>> q = Notice.objects.create(title='sample', likeCount=100, viewCount=100, contents='hello world') >>> q <Notice: ์ ๋ชฉ : sample, ์ข์์ ์ : 100, ์กฐํ์ : 100> >>> q.save()
2.3. ์์
>>> q = Notice.objects.get(title='sample') >>> q.contents = "์์ ๋ ๋ฌธํญ" >>> q <Notice: ์ ๋ชฉ : sample, ์ข์์ ์ : 100, ์กฐํ์ : 100> >>> q.contents '์์ ๋ ๋ฌธํญ' >>> q.save()
์์ ํ์๋ ๋ฐ๋์
.save()
๋ฅผ ํด์ฃผ์ด์ผ DB์ ๋ฐ์์ด ๋ฉ๋๋ค.2.4. ์ญ์
>>> q = Notice.objects.get(pk=2) >>> q.delete() (1, {'main.Question': 1})
(1, {'main.Question': 1})
์ด
1
๊ฐ์ ์์๊ฐ ์ญ์ ๋์๊ณ , ๊ทธ ์ค main.Notice
๋ชจ๋ธ์ ์์๊ฐ 1
๊ฐ ์ญ์ ๋์๋ค๋ ์๋ฏธ์
๋๋ค.