[Django] DB ๋ง๋๋ ๋ฒ
๐ ๊ฐ์
Django๋ฅผ ์ด์ฉํ์ฌ ์น์ ๋ง๋ค๋ฉด์ DB๋ฅผ ๋ง๋ค๊ฒ ๋์๋๋ฐ ๊ณผ์ ์ด ์๊ฐ๋ณด๋ค ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์ธ ๊ฒ ๊ฐ์์ ๋ฉ๋ชจ๋ฅผ ํด๋๋ ค๊ณ ํ๋ค.
์ฌ์ค์ ์ด๋ฏธ DB๋ฅผ ์ฒ์ ๋ง๋ค๋ฉด์ ๋๋ฌด ํท๊ฐ๋ ค์ ๊ฒฝ๋ก ์ง์ ๋ ์ด์ํ๊ฒ ํ๊ณ ์ด๋์ ๋ ์ค์๋ฅผ ๋ง์ด ํด์ ํ๋ก์ ํธ ์์ฒด๋ฅผ ํ๋ฒ ์์๋ ๊ฒฝํ์ด ์์ด์ ๋ค์๋ ์ด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์๋๋ก ํ๊ธฐ ์ํด์ ๋ฉ๋ชจํด๋๋ ๊ฒ์ด๋ค.
์ฅ๊ณ ์ฑ์์๋ Model / View / Template ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ค. ๊ทธ์ค์์ ๋ฐ์ดํฐ ์์ฑ ๋ฐ ๊ด๋ฆฌ๋ Model์์ ํ๊ณ ์๋ค.
๐ models.py ์์
DB๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ models.py๋ฅผ ์์ ํด์ฃผ์ด์ผ ํ๋ค. ์ฐ์ django์ DB๋ฅผ ์ํฌํธ๋ฅผ ํด์ค๋ค.
from django.db import models
์๋๋ ํ๋ ํ์ ์ ๋ํ ๋ด์ฉ์ด๋ค.
ํ๋ ํ์ ์ ๋ํด ์์๋ณด๊ธฐ ์ด์ ์ ๋ชจ๋ธ์ ์๋์ ๊ฐ์ ์์์ผ๋ก ์์ฑ๋์ด์ผ ํ๋ค.
Ex = models.TextField()
๐ ํ๋ ํ์
CharField | ์ ํ๋ ๋ฌธ์์ด ํ๋ ํ์
. ์ต๋ ๊ธธ์ด๋ฅผ max_length ์ต์
์ ์ง์ ํด์ผ ํ๋ค. ๋ฌธ์์ด์ ํน๋ณํ ์ฉ๋์ ๋ฐ๋ผ CharField์ ํ์ํด๋์ค๋ก์, ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ฒดํฌ๋ฅผ ํ๋ EmailField, IP ์ฃผ์๋ฅผ ์ฒดํฌ๋ฅผ ํ๋ GenericIPAddressField, ์ฝค๋ง๋ก ์ ์๋ฅผ ๋ถ๋ฆฌํ CommaSeparatedIntegerField, ํน์ ํด๋์ ํ์ผ ํจ์ค๋ฅผ ํํํ๋ FilePathField, URL์ ํํํ๋ URLField ๋ฑ์ด ์๋ค. |
TextField | ๋์ฉ๋ ๋ฌธ์์ด์ ๊ฐ๋ ํ๋ |
IntegerField | 32 ๋นํธ ์ ์ํ ํ๋. ์ ์ ์ฌ์ด์ฆ์ ๋ฐ๋ผ BigIntegerField, SmallIntegerField ์ ์ฌ์ฉํ ์๋ ์๋ค. |
BooleanField | true/false ํ๋. Null ์ ํ์ฉํ๊ธฐ ์ํด์๋ NullBooleanField๋ฅผ ์ฌ์ฉํ๋ค. |
DateTimeField | ๋ ์ง์ ์๊ฐ์ ๊ฐ๋ ํ๋. ๋ ์ง๋ง ๊ฐ์ง ๊ฒฝ์ฐ๋ DateField, ์๊ฐ๋ง ๊ฐ์ง ๊ฒฝ์ฐ๋ TimeField๋ฅผ ์ฌ์ฉํ๋ค. |
DecimalField | ์์ซ์ ์ ๊ฐ๋ decimal ํ๋ |
BinaryField | ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํ๋ฅผ ์ ์ฅํ๋ ํ๋ |
FileField | ํ์ผ ์ ๋ก๋ ํ๋ |
ImageField | FileField์ ํ์ํด๋์ค๋ก์ ์ด๋ฏธ์ง ํ์ผ์ธ์ง ์ฒดํฌํ๋ค. |
UUIDField | GUID (UUID)๋ฅผ ์ ์ฅํ๋ ํ๋ |
๐ makemigrations
์๋๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์์ฑํ๋ ๋ช ๋ น์ด์ ๋๋ค.
py manage.py makemigration
makemigrations๋ models์ ์ ์ฉํ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด migrations ํ์ผ์ ๋ง๋ ๋ค.
๐ migrate
py manage.py migrate
migrations๋ฅผ ์ ์ฉ ๋ฐ ์ ์ฉ ํด์ - ํด๋น ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ DB์ ๋ฐ์
๐ makemigrations์ migrate์ ์ฐจ์ด
makemigrations๋ ์ฅ๊ณ ์์ ์ ๊ณตํ๋ ๋ชจ๋ธ์ ๋ณ๊ฒฝ์ฌํญ๋ค์ ๊ฐ์งํ๊ณ ๊ธฐ๋กํ๋ ์ญํ ,
migrate๋ ๊ทธ๋ฌํ ๊ธฐ๋ก๋ ํ์ผ๋ค๊ณผ ์ค์ ๊ฐ๋ค์ ์ฝ์ด์ ๊ทธ ๋ณ๊ฒฝ์ฌํญ์ DB์ ์ ์ฅํ๋ ์ญํ ์ ํ๋ค.
๐ tip.
- makemigrations ์ดํ์๋ migration ํด๋๋ฅผ ํ์ธํ๋ ์ต๊ด์ ๊ฐ๋๊ฒ ์ข๋ค. DB๋ ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋ฌด์์ด ์์ ๋์๋์ง ๋ค์ ํ๋ฒ ํ์ธํ๋ ์ต๊ด.
- makemigrations [app-name] ์ฒ๋ผ app ์ด๋ฆ์ ๋ช ์ํ๋ ๊ฒ์ด ์ข๋ค. (์์์น ๋ชปํ migration์ ๋ฐฉ์ง)
- showmigrations ๋ฅผ ํตํด์ ์ ์ฉ ์ํ๋ฅผ ์กฐํํ ์ ์๋ค. [x] : ์ ์ฉ ํ []: ์ ์ฉ ์
- ์ค์ DB์๋ sql ์ฟผ๋ฆฌ๋ก ๋ช ๋ น์ด ์ ๋ฌ์ด ๋๋ค. migration ํ์ผ์ ์ฟผ๋ฆฌ๋ ์๋๋ค. ๋ฐ๋ผ์sqlmigrate ๋ช ๋ น์ ํตํด sql๋ก๋ ํ์ธํ๋ ์ต๊ด์ด ํ์ํ๋ค.
- ์ด๋ฏธ ์ ์ฉํ migration ํ์ผ์ ์ ๋๋ก ์ง์ฐ๋ฉด ์๋๋ค.
- ํ๋ก์ ํธ/์ฑ ์์ฑ ํ ์ฒ์ migrate ํ ๋๋ app ์ด๋ฆ์ ๋ช ์ํ์ง ์๋๋ค. ์ด๋ ์ฅ๊ณ ๊ธฐ๋ณธ ์ฑ์, ์ฌ๋ฌ ์ฑ์ ๊ฑธ์ณ์ ์ ์ฉํ migrate๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- no such table, column ๋ฑ์ ์ค๋ฅ๋ migration ๊ด๋ จ ๋ฌธ์ ์ด๋ค.
'BackEnd > Django, DRF' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Project] ํฌํธํด๋ฆฌ์ค ์น์ฌ์ดํธ ๋ง๋ค๊ธฐ (0) | 2022.12.15 |
---|---|
[Django] BD์ ๋ด๊ฒจ์๋ ์ฟผ๋ฆฌ ๊ฐ HTML์์ ์ฌ์ฉํ๊ธฐ (0) | 2022.11.25 |
[Django] ํ๋ก์ ํธ ๊ตฌ์กฐ ์ค์ , ๋ง๋๋ ์์ (0) | 2022.11.22 |
[Django] static ํ์ผ ์ด๋ฏธ์ง HTML์ ์ถ๊ฐํ๊ธฐ (0) | 2022.11.20 |
[Django] ์ฒซ ๋ฒ์งธ ์ฅ๊ณ ์ฑ ์์ฑํ๊ธฐ, part4 (0) | 2022.11.17 |