Study Anything ๐Ÿง

[Django] ๋ชจ๋ธ ์ˆ˜์ •ํ•˜๊ณ  ์‚ญ์ œํ•˜๊ธฐ ๋ณธ๋ฌธ

์Šคํ„ฐ๋””/Web

[Django] ๋ชจ๋ธ ์ˆ˜์ •ํ•˜๊ณ  ์‚ญ์ œํ•˜๊ธฐ

์†” 2022. 2. 8. 21:51

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์ดˆ๊ธฐ์— ์ž‘์„ฑํ–ˆ๋˜ ๋ชจ๋ธ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ณ ,

๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•ด์•ผ ํ•  ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๊ด€๋ จ ๋‚ด์šฉ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ธ€๋กœ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

 

(1) ๋ชจ๋ธ ์ˆ˜์ •ํ•˜๊ธฐ

 

๊ธฐ์กด์— ์ž‘์„ฑํ–ˆ๋˜ ๋ชจ๋ธ์˜ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

# app/models.py

class Review(models.Model):
    reviewId = models.IntegerField(primary_key=True)	# ์‚ญ์ œํ•  ๋‚ด์šฉ
    userId = models.ForeignKey(User, on_delete=models.CASCADE)
    bookId = models.CharField(max_length=30)
    reviewTxt = models.TextField()

์ด ๋‚ด์šฉ์—์„œ ์„œํ‰ ์ œ๋ชฉ, ์„œํ‰ ํ‰์ , ์„œํ‰ ์ž‘์„ฑ๋‚ ์งœ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ 

PK์ธ reviewId ํ•„๋“œ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ์žฅ๊ณ  ๋ชจ๋ธ์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” id๋ฅผ PK๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

 

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜์—ฌ ํŒŒ์ผ์„ ๋จผ์ € ์ˆ˜์ •ํ•œ๋‹ค.

# app/models.py

class Review(models.Model):
    userId = models.ForeignKey(User, on_delete=models.CASCADE)
    bookId = models.CharField(max_length=30)
    reviewTitle = models.CharField(max_length=200)	# ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ
    reviewDate = models.DateField(auto_now_add=True)	# ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ
    reviewRate = models.IntegerField()			# ์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ
    reviewTxt = models.TextField()

์„œํ‰ ๋‚ ์งœ(reviewDate) ํ•„๋“œ๋ฅผ models.DateField() ๋กœ ์„ค์ •ํ•˜๊ณ , ์†์„ฑ์— auto_now_add=True ๋ฅผ ์ฃผ์–ด์„œ

๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋œ ๋‚ ์งœ๋ฅผ ํ•„๋“œ ๋‚ด์šฉ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋‚ ์งœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ–ˆ๋‹ค.

* models.DateField() ์—์„œ auto_now ์†์„ฑ์„ True ๋กœ ์„ค์ •ํ•˜๋ฉด ์—…๋ฐ์ดํŠธ ๋œ ๋‚ ์งœ๋กœ ๋ฐ˜์˜๋œ๋‹ค.

 

 

 

 

(2) DB ์ˆ˜์ •ํ•˜๊ธฐ

 

models.py ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” migrate ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ,

PK ํ•„๋“œ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ๊ณ  ๊ธฐ์กด์˜ ๋ฐ์ดํ„ฐ๋„ ์ „๋ถ€ ์‚ญ์ œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ” ์ž์ฒด๋ฅผ ์‚ญ์ œํ•˜๊ณ 

์ƒˆ๋กœ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ migration ํŒŒ์ผ์ด ๊ณ„์†ํ•ด์„œ ๋‚จ์•„์žˆ์œผ๋ฉด ์›ํ™œํ•˜๊ฒŒ DB์— ๋ฐ˜์˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—

ํ…Œ์ด๋ธ” ์‚ญ์ œ๋Š” ๋‹ค์Œ์˜ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ์„œ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.

 

 

 <1> migration ํŒŒ์ผ ์‚ญ์ œ 

๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‚˜์„œ migrate ๋ฅผ ํ•œ ๋ฒˆ์ด๋ผ๋„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด migrations ํด๋”๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ,

ํ•ด๋‹น ํด๋” ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค ์ค‘ __init__.py ํŒŒ์ผ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํŒŒ์ผ์„ ์‚ญ์ œํ•œ๋‹ค.

migration ํŒŒ์ผ ์•ˆ์—๋Š” ๊ธฐ์กด์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๋ชจ๋ธ์˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—

ํ•ด๋‹น ํŒŒ์ผ๋“ค์„ ์‚ญ์ œํ•ด์•ผ ์ƒˆ๋กญ๊ฒŒ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•  ๋•Œ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

 

 <2> migrations ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ ์‚ญ์ œ 

django_migrations ํ…Œ์ด๋ธ” ์•ˆ์— ํ•ด๋‹น ์•ฑ์˜ migrations ๋‚ด์šฉ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๋„ ์‚ญ์ œํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์€ SQLite ์˜ GUI ๋„๊ตฌ์ธ DB Brower for SQLite ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

 

 <3> ํ…Œ์ด๋ธ” ์‚ญ์ œ 

๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” ํ…Œ์ด๋ธ”์„ ์‚ญ์ œํ•œ๋‹ค.

 

 

 

 

(3) ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉํ•˜๊ธฐ

 

ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ณ  DB ์—์„œ๋„ ๊ด€๋ จ ๋‚ด์šฉ์„ ๋ชจ๋‘ ์‚ญ์ œํ–ˆ๋‹ค๋ฉด

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.

cmd ์ฐฝ์„ ์—ด์–ด์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ์ž…๋ ฅํ•œ๋‹ค.

 

makemigrations ๋ช…๋ น์–ด๋Š” migrate ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์•ž์„œ

๋ชจ๋ธ๊ณผ ๊ด€๋ จํ•œ SQL ๋‚ด์šฉ์„ ๋‹ด์€ migrations ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ (2)-<1> ๋‹จ๊ณ„์—์„œ ์‚ญ์ œํ–ˆ๋˜ ํŒŒ์ผ์„ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์— ๋งž์ถฐ์„œ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

(venv) C:\์ƒ๋žต\Project> python manage.py makemigrations

 

sqlmigrate ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด migrate ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์–ด๋–ค SQL ๊ตฌ๋ฌธ์ด ์ˆ˜ํ–‰๋˜๋Š”์ง€ ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

app ๋’ค์˜ ์ˆซ์ž๋Š” migrations ํŒŒ์ผ์˜ ๋ฒˆํ˜ธ๋กœ, ํ•ด๋‹น ํŒŒ์ผ์ด ๋‹ด๊ณ  ์žˆ๋Š” SQL ๊ตฌ๋ฌธ์„ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋œ๋‹ค.

(venv) C:\์ƒ๋žต\Project> python manage.py sqlmigrate app 0001

 

migrate ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์ด ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋œ๋‹ค.

(venv) C:\์ƒ๋žต\Project> python manage.py migrate

 

 

 

์œ„ ๊ณผ์ •์„ ๊ฑฐ์ณ ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ์˜ ์•ฑ ๋ชจ๋ธ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‚ญ์ œํ•˜๋Š” ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ๋‹ค.

์ƒˆ๋กญ๊ฒŒ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•ด๋ณด์•˜๋‹ค.

์•„๋ž˜ ํŽ˜์ด์ง€๋Š” REST API ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ๊ด€๋ จ ๋‚ด์šฉ์€ ๋‹ค๋ฅธ ํฌ์ŠคํŠธ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃจ์—ˆ๋‹ค.

728x90
Comments