반응형
Notice
Recent Posts
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Today
Total
관리 메뉴

H-Log

[python] Django Database 사용 본문

dev-log/python

[python] Django Database 사용

hong6v6 2023. 1. 30. 22:31
반응형

sqlite 를 사용하여 django에서 데이터베이스를 작업해보자

*django에서는 데이터베이스 종류에 관계없이 사용할 수 있다고 한다

다른 데이터베이스를 사용하고 싶다면, mysite/setting.py에서 아래 부분을 수정해주면 된다

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

 

DB Table 생성

mysite/setting.py 파일 상단에 INSTALLED_APPS라고 있는데, 해당 리스트는 현재 Django 인스턴스에서 활성화된 모든 Django 어플리케이션들의 이름입니다.

이러한 기본 어플리케이션들 중 몇몇은 최소한 하나 이상의 데이터베이스 테이블을 사용합니다.

그러기 위해서는 데이터베이스에서 테이블을 미리 만들 필요가 있습니다.

이를 위해, 다음의 명령을 실행해봅시다.

py manage.py migrate

 

DB Model 생성

모델이란 데이터베이스의 구조(layout)를 말합니다

설문조사 앱(polls)에서 사용하기 위해 Question과 Choice 두가지 모델을 만들어봅시다.

  • Question에는 ‘질문'과 ‘발행일’ 두 개의 필드를 가집니다.
  • Choice 는 ‘선택 텍스트’와 ‘투표 집계’를 위한 두 개의 필드를 가집니다.
  • 각각의 Choice모델은 Question과 연동됩니다.

모델은 class형태로 polls/models.py 에 작성해줍니다.

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

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

*ForeignKey : Question 내의 Key를 참조하겠다는 의미

 

DB Model 활성화

Django에서는 사용할 앱과 사용 안할 앱을 어디서 구분하느냐,

바로 아까 잠시 보고 지나간 mysite/setting.py 파일 상단에 있는 INSTALLED_APPmysite/setting.py 파일 상단에 INSTALLED_APPS라고 있는데에서 설정할 수 있다.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

이 list 안에 넣으면 활성화, 지우면 비활성화가 된다.

여기에 polls앱을 추가하여 polls앱을 활성화 시켜주자

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls.apps.PollsConfig'
]

polls.apps.PollsConfig 는 polls폴더에 있는 apps.py 파일에서 PollsConfig라는 이름의 함수 또는 class를 가르킨다.

그리고 다음 명령어를 입력해줍니다.

py manage.py makemigrations polls

makemigrations 을 실행시킴으로서, 우리가 모델을 변경시킨 사실과(이 경우에는 새로운 모델을 만들었습니다) 이 변경사항을 migration으로 저장시키고 싶다는 것을 Django에게 알려줍니다.

명령어 입력 후 완료가 되면, polls/migrations/0001_initial.py 에 데이터베이스의 설계도가 만들어진걸 확인할 수 있다.

class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Question',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('question_text', models.CharField(max_length=200)),
                ('pub_date', models.DateTimeField(verbose_name='date published')),
            ],
        ),
        migrations.CreateModel(
            name='Choice',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('choice_text', models.CharField(max_length=200)),
                ('votes', models.IntegerField(default=0)),
                ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.question')),
            ],
        ),
    ]

그리고 실제 테이블을 생성하자

py manage.py migrate
반응형

'dev-log > python' 카테고리의 다른 글

[python] Django Admin Page  (0) 2023.01.30
[python] Django API 사용하기  (0) 2023.01.30
[python] Django 프로젝트 생성  (0) 2023.01.30
[python] Django 가상서버 생성 및 진입  (0) 2023.01.30
[python] pandas 퀴즈  (0) 2023.01.17
Comments