JUST DO IT!

[TIL]KDT_20230424 ๋ณธ๋ฌธ

TIL

[TIL]KDT_20230424

sunhokimDev 2023. 4. 24. 17:04

๐Ÿ“š KDT WEEK 4 DAY 1 TIL

  • Django
    • Django ๋ง›๋ณด๊ธฐ
    • Django Shell

์‚ฌ์šฉํ•œ ํ™˜๊ฒฝ : ์œˆ๋„์šฐ ํ„ฐ๋ฏธ๋„ + python ๊ฐ€์ƒํ™˜๊ฒฝ + Django + VSC (Windows 10)

 

๐ŸŸฅ Django

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ์›น ์‚ฌ์ดํŠธ ์ž‘์„ฑ์— ํŠนํ™”๋œ ํŒŒ์ด์ฌ์˜ ์˜คํ”ˆ ์†Œ์Šค ์›น ํ”„๋ ˆ์ž„์›Œํฌ

 

ํ„ฐ๋ฏธ๋„์˜ ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•œ ๋ช…๋ น์–ด ์œ„์ฃผ๋กœ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค!

 

  • django-admin startproject mysite : "mysite" ์ด๋ฆ„์˜ ์ƒˆ๋กœ์šด Django ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

 

Visual Studio Code์—์„œ ์ƒ์„ฑ๋œ mysite ํด๋”๋ฅผ ์—ด์–ด๋ณด๋ฉด, ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ .py ํŒŒ์ผ๋“ค์ด ๋งŽ์ด ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค. (polls ํด๋” ์ œ์™ธ)

 

 

 

 

 

 

  • python manage.py runserver : ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ๋ช…๋ น์–ด
    • ๋ช…๋ น์–ด ์ž…๋ ฅ ํ›„ ๋‚˜ํƒ€๋‚œ ์ฃผ์†Œ, 127.0.0.1:8000 ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด..

์ด๋Ÿฌํ•œ ํ™˜์˜ ๋ฌธ๊ตฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค

 

  • python manage.py startapp polls : "polls" ์•ฑ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. mysite ํด๋”์— polls ํด๋”์™€ ์—ฌ๋Ÿฌ .py ํŒŒ์ผ์ด ์ถ”๊ฐ€๋œ๋‹ค.
    • ์•ฑ์€ url์„ ๋ถ„ํ• ํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ!

 


 

URL ๊ฒฝ๋กœ(path) ์„ค์ •ํ•ด๋ณด๊ธฐ

 

mysite > urls.py ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ด์ค€๋‹ค.

polls ํด๋”์˜ urls์—์„œ polls/ ์ดํ›„์˜ url์„ ์ปจํŠธ๋กคํ•˜๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

mysite\urls.py

 

polls > urls.py ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ด์ค€๋‹ค.

  • polls/ ์ดํ›„์˜ ๊ฒฝ๋กœ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ณผ์ •์ด๋‹ค.
  • ์˜ˆ์‹œ๋กœ, ์ฒซ ๋ฒˆ์งธ path์˜ ๊ฒฝ์šฐ http://127.0.0.1:8000/polls/ ์˜ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ๋ฅผ ๋งก์•˜๋‹ค.
  • ํŽ˜์ด์ง€์˜ ์ถœ๋ ฅ์€ views.py๊ฐ€ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ views๋ฅผ importํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๋„๋ก ํ•œ๋‹ค.

polls\urls.py

 

polls > views.py ์—์„œ HttpResponse๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํžˆ ์ถœ๋ ฅ์„ ์„ค์ •ํ•ด์ฃผ๋ฉด..

ํ•ด๋‹น url์€ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ๊ฐ ์ฒ˜๋ฆฌํ•œ๋‹ค
์‰ฝ๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 


 

๋ชจ๋ธ ์„ค์ •ํ•˜๊ธฐ

 

๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋‹ค๋ฃฌ๋‹ค.

  1. ๋ชจ๋ธ ์ƒ์„ฑํ•˜๊ธฐ + (์•ฑ ๋“ฑ๋กํ•˜๊ธฐ)
  2. ๋ชจ๋ธ์„ ํ…Œ์ด๋ธ”์— ์จ ์ฃผ๊ธฐ ์œ„ํ•œ Migration์„ ๋งŒ๋“ ๋‹ค. (makemigrations)
  3. ๋ชจ๋ธ์— ๋งž๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ ๋‹ค (migrate)

 

1. ๋ชจ๋ธ ์ƒ์„ฑํ•˜๊ธฐ

๋ชจ๋ธ์€ polls > models.py ์—์„œ ์ƒ์„ฑํ•œ๋‹ค

  • class๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ , ๊ผญ models.Model์„ ์ƒ์†๋ฐ›์•„์•ผ ํ•œ๋‹ค
  • ๋ชจ๋ธ ์•ˆ์— ์‚ฌ์šฉํ•  ์†์„ฑ(attribute)์„ ํƒ€์ž…(Field)์™€ ํ•จ๊ป˜ ์ •์˜ํ•œ๋‹ค.
  • id๋Š” Migrationํ•˜๋ฉด์„œ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.(Django ๊ธฐ๋Šฅ)
  • ์ˆ˜์ •๋˜๋Š” ๊ฒฝ์šฐ, ๋‹ค์‹œ migrate๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
from django.db import models
from django.utils import timezone
import datetime

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(auto_now_add=True) # ์งˆ๋ฌธ์˜ ์ƒ์„ฑ ๋‚ ์งœ # auto_now : ์—…๋ฐ์ดํŠธ๋ ๋•Œ๋งˆ๋‹ค, auto_now_add : ์ƒˆ๋กœ ๋“ฑ๋ก๋  ๋–„๋งŒ
    # score = models.FloatField(default=0)
    # is_something_wrong = models.BooleanField(default=False)
    # json_field = models.JSONField(default=dict)

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    
    def __str__(self): # ์ž๊ธฐ ์ž์‹ ์„ ๋ฌธ์ž์—ด๋กœ ์ •์˜ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์ •์˜ํ• ์ง€?
        if self.was_published_recently:
            new_badge = "NEW!!!"
        else:
            new_badge = ''
        return f'{new_badge} ์ œ๋ชฉ : {self.question_text}, ๋‚ ์งœ : {self.pub_date} '

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return f'[{self.question.question_text}] {self.choice_text}'

์•ฑ ๋“ฑ๋กํ•˜๊ธฐ

polls > apps.py๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ class๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ mysite > settings.py์— ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค.

polls\apps.py

 

mysite > settings.py์˜ INSTALLED_APPS์— polls์•ฑ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์ž‘์„ฑํ•ด์ค€๋‹ค (์ตœํ•˜๋‹จ๋ถ€)

mysite\settings.py

 

2. Migration ๋งŒ๋“ค๊ณ  ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ

์•„๊นŒ์˜ ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด๋กœ ๋Œ์•„์™€์„œ,

  • python manage.py makemigrations polls : polls ์•ฑ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋งŒ๋“ ๋‹ค.
    • python manage.py sqlmigrate polls 0001 : 0001๋ฒˆ์งธ์˜ polls์•ฑ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•œ๋‹ค.
  • python manage.py migrate : ๋งŒ๋“ค์—ˆ๋˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰์‹œํ‚จ๋‹ค. (ํ…Œ์ด๋ธ”์ƒ์„ฑ)
    • python manage.py migrate polls 0001 : 0001๋ฒˆ์งธ์˜ polls์•ฑ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ„๋‹ค
    • !์ฃผ์˜ : ๋Œ์•„๊ฐ„ ์ƒํƒœ ์ดํ›„์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๊ณผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค.

 


sqlite3์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™•์ธํ•˜๊ธฐ

Django๋Š” sqlite3๋ฅผ ๋ฐ”๋กœ ์ž๋™์ง€์›ํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ๋‚˜๋Š” ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค. (์œˆ๋„์šฐ๋ผ ๊ทธ๋Ÿฐ๊ฐ€?)

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ์ˆ˜๋™์œผ๋กœ ๋‹ค์šด๋ฐ›์•„ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

sqlite ๋งํฌ : https://sqlite.org/download.html ์—์„œ sqlite-tools-win32-.. ๋ฅผ ๋‹ค์šด๋ฐ›์•„ ์ €์žฅํ•˜๊ณ ,

์œˆ๋„์šฐ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •์—์„œ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ์ •์ƒ์ž‘๋™ํ•œ๋‹ค.

์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ : https://bskyvision.com/entry/sqlite3-%EC%84%A4%EC%B9%98-%EB%B0%8F-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-path-%EC%84%A4%EC%A0%95

 

  • sqlite3 db.sqlite3 : db.sqlite3 ํŒŒ์ผ์„ ํ†ตํ•ด Django ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•œ๋‹ค.

 

> sqlite3 ๋ช…๋ น์–ด

  • .table : ์ „์ฒด ํ…Œ์ด๋ธ” ํ™•์ธ
  • .schema ํ…Œ์ด๋ธ”์ด๋ฆ„ : ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ํ™•์ธ
  • SQL๋ฌธ ์ˆ˜ํ–‰(SELECT ๋“ฑ)

 


 

๊ด€๋ฆฌ์ž(admin) ๊ณ„์ • ์ƒ์„ฑํ•˜๊ธฐ

  • python manage.py createsuperuser : admin ๊ณ„์ • ์ƒ์„ฑ
    • admin์€ CRUD ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
    • http://127.0.0.1:8000/admin/ ์—์„œ ๊ณ„์ •๊ณผ ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
      • polls\admin.py์— admin.site.register(๋ชจ๋ธ์ด๋ฆ„)์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ admin์ด ์‚ฌ์ดํŠธ์—์„œ ์ œ์–ด ๊ฐ€๋Šฅ
      • admin.py์— ๋ชจ๋ธ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” models.py์˜ ํด๋ž˜์Šค๋ฅผ import ํ•ด์•ผํ•œ๋‹ค

admin ํŽ˜์ด์ง€๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 


 

๐ŸŸฆ Django Shell

  • python manage.py shell : Django Shell์— ์ง„์ž…ํ•˜๋Š” ๋ช…๋ น์–ด
    • ๋ฐ์ดํ„ฐ ์กฐํšŒ๋‚˜ ์ œ์–ด(CRUD)๋ฅผ shell์—์„œ ์‰ฝ๊ฒŒ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
    • ์ „์ฒด ํ”„๋กœ์ ํŠธ ๊ด€์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ import์‹œ ํด๋”์œ„์น˜์— ์ฃผ์˜ํ•œ๋‹ค.

 

๋ช…๋ น์–ด๋ฅผ ์„ค๋ช…ํ•  ๋•Œ, ํŽธ์˜์ƒ ์œ„์—์„œ ์ •์˜ํ•œ ๋ชจ๋ธ์„ ๋“ค์–ด ์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค

๋ชจ๋ธ : Question, Choice

 ๋ชจ๋ธ ์˜ค๋ธŒ์ ํŠธ, ์†์„ฑ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ

  • from polls.models import *

 polls ์•ฑ์˜ models์—์„œ ์ •์˜๋œ ํด๋ž˜์Šค๋ฅผ ๋จผ์ € import ํ•ด์•ผํ•œ๋‹ค.

 

  • Question.objects.all()

Question ๋ชจ๋ธ์˜ ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค (List)

 

  • choice = Choice.objects.first() 

Choice ๋ชจ๋ธ์˜ ์ฒซ ๋ฒˆ์งธ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.  // last() : ๋งˆ์ง€๋ง‰

 

  • choice.pub_date

ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ(choice)์˜ pub_date ์†์„ฑ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 

  • choice.question

์™ธ๋ž˜ํ‚ค๋กœ ์—ฐ๊ฒฐ๋œ question ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์†์„ฑ ๊ฐ’ ๊ฐ€์ ธ์˜ค๋“ฏ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ

 

  • choice.question.pub_date

ํ•ด๋‹น choice์— ์—ฐ๊ฒฐ๋œ question ์˜ค๋ธŒ์ ํŠธ์˜ pub_date๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค

 

  • question.choice_set.all()

ํ•ด๋‹น question๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  Choice๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค

 

 

 ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑํ•˜๊ธฐ

q1 = Question(question_text = "์ปคํ”ผ vs ๋…น์ฐจ")
q1.pub_date = timezone.now()
q1.save()
  • question_text๋ฅผ "์ปคํ”ผ vs ๋…น์ฐจ" ๋‚ด์šฉ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ q1์— ๋จผ์ € ์ €์žฅํ•œ๋‹ค.
  • pub_date๋„ ํ•„์š”ํ•˜๋ฏ€๋กœ timezone.now()์„ ํ™œ์šฉํ•˜์—ฌ ํ˜„์žฌ์‹œ๊ฐ์„ ์ €์žฅํ•œ๋‹ค.
    • timezone์€ Django์˜ ๊ธฐ๋Šฅ์œผ๋กœ, datetime๊ณผ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.
    • from django.utils import timezone
  • .save() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜๋œ๋‹ค.

 

q1.choice_set.create(choice_text = "b")
choice_c = Choice(choice_text='c', question=q1)
choice_c.save()
  • q1์˜ choice_set์— ์žˆ๋Š” create ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฐ”๋กœ q1๊ณผ ์—ฐ๊ฒฐ๋œ Choice ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ๊ฐ€๋Šฅ (DB ๋ฐ”๋กœ๋ฐ˜์˜)
  • choice ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฒฝ์šฐ ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์™ธ๋ž˜ํ‚ค ํ• ๋‹น๊นŒ์ง€ ์ œ๋Œ€๋กœ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

 ๋ ˆ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•˜๊ธฐ

q = Question.objects.last()
q.question_text += '???'
q.delete()
  • q์˜ ์†์„ฑ ๊ฐ’์„ ์กฐํšŒํ•ด์„œ ์—ฐ์‚ฐ์ž๋กœ ๋ฐ”๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅ (save ํ•ด์•ผ DB ๋ฐ˜์˜๋จ)
  • .delete() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ ์‚ญ์ œ ๊ฐ€๋Šฅ (DB ๋ฐ”๋กœ๋ฐ˜์˜)

 

๋ชจ๋ธ ํ•„ํ„ฐ๋ง

Question.objects.get(id=1)
Question.objects.get(question_text__startswith='ํœด๊ฐ€๋ฅผ')
# Question.objects.get(pub_date__year=2023) # ์—ฌ๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ•ด๋‹น๋˜๋ฉด ์—๋Ÿฌ๋ฐœ์ƒ
  • .get()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‹จ ๋ฐ” ๋‘๋ฒˆ( __ ) ์œผ๋กœ ๊ตฌ์ฒด์ ์ธ ์กฐ๊ฑด์„ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค. (startswith : ~๋กœ ์‹œ์ž‘ํ•˜๋Š”)
  • get์€ ์—ฌ๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ํ•ด๋‹น๋˜๋ฉด, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

 

Question.objects.filter(pub_date__year=2023)
Question.objects.exclude(pub_date__year=2023)
Question.objects.filter(pub_date__year=2023).count()
Question.objects.filter(pub_date__year=2023).query
  • .filter()๋Š” get๊ณผ ๋‹ค๋ฅด๊ฒŒ ์—ฌ๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. (List)
  • .exclude()๋Š” filter()์™€ ์ •๋ฐ˜๋Œ€์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ( WHERE NOT )
  • .count()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น๋œ ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • .query๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํ•„ํ„ฐ์˜ SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (์ด๊ฑด filter๋ฟ๋งŒ์•„๋‹ˆ๋ผ ๋ชจ๋‘์— ํ•ด๋‹น)

 


 

๐Ÿค” ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์–ด๋ ค์› ๋˜ ๋‚ด์šฉ

์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ์ œ์ผ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹คใ…‹ใ…‹ใ…‹ใ… ใ… ใ… 

์œˆ๋„์šฐ ํ„ฐ๋ฏธ๋„๋„ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ดค๊ณ .. sqlite3๋„ path ์„ค์ •์—†์ด๋Š” ์‹คํ–‰๋˜์ง€์•Š์•˜๋‹ค..

๊ฐ•์˜๋ณด๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ์ด๋Ÿฐ๋ฐ์— ์‹œ๊ฐ„์„ ๋” ๋งŽ์ด ์“ด๊ฒƒ๊ฐ™์ง€๋งŒ, ์ด๊ฒƒ๋„ ๋‹ค ๋‚ด๊ฐ€ ๋ฐœ์ „ํ•ด๊ฐ€๋Š” ํž˜์ด ๋˜๊ฒ ์ง€..!

๊ทธ๋ž˜๋„ ๊ฐ•์˜๋Š” ์˜ˆ์ „์— ๋งฅ์œผ๋กœ Django๋ฅผ ์จ๋ณธ์ ์ด ์žˆ์–ด์„œ ๊ดœ์ฐฎ์•˜๋‹ค ๐Ÿ‘

 

 

'TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL]KDT_20230426  (0) 2023.04.26
[TIL]KDT_20230425  (0) 2023.04.25
[TIL]KDT_20230421  (0) 2023.04.21
[TIL]KDT_20230420  (0) 2023.04.20
[TIL]KDT_20230419  (0) 2023.04.19