๋ชจ๋ธ ์์ฑ & ์ ์ฉ ๊ณผ์
์ฌ์ฉํ ๋ฐ์ดํฐ ํ์ธ โ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง โ ๋ฐ์ดํฐ์ ๋ง๋ field ์์ฑ โ ๋ชจ๋ธ ์์ฑ / ๋ณ๊ฒฝ โ django ๋ฐ์
django์์ model ์์ฑ.
#models.py from django.db import models class Menu(models.Model): name = models.CharField(max_length=50) price = models.IntegerField() img_path = models.TextField()
๋ง์ด๊ทธ๋ ์ด์ (Migration)์ ๋ชจ๋ธ(Model)์ ๋ณ๊ฒฝ ์ฌํญ ์ฆ Django ํ๋ก์ ํธ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด๋ฆฌํ๊ธฐ ์ํ Django๋ง์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ด๋ค. ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํ์คํ ๋ฆฌ๋ฅผ ํ๋์ฉ ๋ง๋ค์ด ๋๊ณ ๋ง์น ๋ธ๋ญ์ ๊ฐ์ ๋ผ์ฐ๋ฏ ์์ฑํ ํ์คํ ๋ฆฌ๋ฅผ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ ๊ฑฐ์ฃ . ๊ทธ๋ฆฌ๊ณ ์ด ๋ชจ๋ ๊ณผ์ ์ Django์ ORM(Object-Relational Mapping)์ ํตํด ์งํํ๋ค.
๋ณํํ์ฌ ๋ณํฉํ Migrations ์ ์์ฑ.
python manage.py makemigrations
์ ์ฒด migrations ํ์ธ
python manage.py showmigrations
ORM ์ ํตํด sql ๋ก ๋ณ๊ฒฝ์ ํ์ธ
python manage.py sqlmigrate {app๋ช } {migrations num}
๋ณ๊ฒฝ ํ์คํ ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์
python manage.py migrate
ํด๋น ํ๋ก์ ํธ๋ก ์ด๋ ํ shell ์คํ
python manage.py shell
{model}.objects.all() : ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํ
{model}.objects.all.values(์ปฌ๋ผ๋ช ) : ํน์ ์ปฌ๋ผ์ ๋ฐ์ดํฐ ์กฐํ
{model}.objects.order_by(ํ๋๋ช ) : ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ๋ด๋ฆผ์ฐจ์์ผ๋ก ํ ๋ ํํฐ์ '-' ๋ถ์ฌ์ ์ฌ์ฉ
{model}.objects.get(field=value) : ํ๋์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ. ์ฌ๋ฌ๊ฐ ๋์ฌ ์ ์๋ฌ ๋ฐ์
{model}.objects.filter(field=value) : ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํ
rows = {model}.objects.count() : ๋ฐ์ดํฐ ๊ฐ์ ์ธ๊ธฐ
data = {model}.objects.exclude(field=value) : ํน์ ์กฐ๊ฑด ์ ์ธํ ๋ฐ์ดํฐ ์กฐํ
data = {model}.objects.filter(price=10000).order_by('name') : ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐํด์ ์กฐํ
์กฐ๊ฑด ํค์๋ ๊ฒ์
__exact
,__iexact
: ๋์๋ฌธ์ ๊ตฌ๋ถ/๋ฏธ๊ตฌ๋ถ ์ผ์นํ๋์ง๋ฅผ ์ฒดํฌdata = {model}.objects.filter({ํ๋๋ช }__iexact='chicken') # {ํ๋๋ช }์ด 'chicken'์ธ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์กฐํํฉ๋๋ค. # ๋จ, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
__contains
,__icontains
: ์ง์ ํ ๋ฌธ์์ด์ ํฌํจํ๋์ง ์ฒดํฌ (๋์๋ฌธ์ ๊ตฌ๋ถ/๋ฏธ๊ตฌ๋ถ)data = {model}.objects.filter({ํ๋๋ช }__contains='chicken') # {ํ๋๋ช }์ 'chicken'์ด ํฌํจ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค. # ๋จ, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค. (__contains)
__range
: ์ง์ ํ ๋ฒ์ ๋ด์ ํฌํจ๋๋์ง ์ฒดํฌdata = {model}.objects.filter({ํ๋๋ช }__range=(1000,5000)) # {ํ๋๋ช }์ด 1000~5000์ธ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
__in
: ์ฃผ์ด์ง ๋ฆฌ์คํธ ์์ ์กดํ๋ ์๋ฃ๋ฅผ ์กฐํdata = {model}.objects.filter({ํ๋๋ช }__in=[21,25,27])
from {app}.models import {model๋ช }
data = {model๋ช }.objects.get(id=1)
data.{ํ๋๋ช } = {๋ณ๊ฒฝํ ๋ด์ฉ}
data.save()
{model๋ช }.objects.all()
from {app}.models import {model๋ช }
data = {model๋ช }.objects.get(id=1)
data.delete()