본문 바로가기

Python/Django

[Django] Django - (basic migrate) DB, model, field

이번에는 DB 모델링 부분이 추가된 migrate 에 대해서 알아보겠습니다.

지난번 절차에서 DB 관련 모델링부분(models.py)이 추가되어 진행결과가 조금 다른 부분이 있으니 이 부분을 집중하시기 바랍니다.

 

2022.10.25 - [Python/Django] - [Django] Django - (맛보기 migrate)App별 template 디렉토리

 

[Django] Django - (맛보기 migrate)App별 template 디렉토리

이번에는 앱별로 템플릿 디렉토리를 만들어서 관리하는 방법에 대해서 알아보겠습니다. settings.py 파일의 INSTALLED_APPS 변수에 그 커스텀 Django 앱을 등록해야 합니다. 1단계 새로운 Django 앱 생성 - m

unsungit.tistory.com

 

 

  • 간단하게 프로젝트와 앱을 생성하겠습니다.
> django-admin startproject my_site
> cd my_site
~/my_site> python manage.py startapp office

 

프로젝트 레벨의 settings.py 에서 sqlite3 디비에 대한 정보(디비 엔진, 디비 파일명/파일위에 대한 정보)가 있음

힌트) 아직까진 db.sqlite3 파일이 생성되지 않은 상태임.

 

 

  • migrate 진행하면 db 파일이 생김.
~/my_site> python manage.py migrate

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
  
  (django) D:\workspace\Python\Django\DJANGO4\DJANGO_COURSE_V2\08-Django-Models-Databases\my_site>dir
 D 드라이브의 볼륨: OS_WORK
 볼륨 일련 번호: 9C64-09D3

 D:\workspace\Python\Django\DJANGO4\DJANGO_COURSE_V2\08-Django-Models-Databases\my_site 디렉터리

2022-10-28  오후 01:28    <DIR>          .
2022-10-28  오후 01:17    <DIR>          ..
2022-10-28  오후 01:28           131,072 db.sqlite3
2022-10-28  오후 01:17               685 manage.py
2022-10-28  오후 01:17    <DIR>          my_site
2022-10-28  오후 01:17    <DIR>          office
               2개 파일             131,757 바이트
               4개 디렉터리  115,535,073,280 바이트 남음

 

 

여기까지는 별다른 수정사항 없이 기계적으로 진행하면 됩니다.

 

 

  • makemigrations - 앱레벨(office)의 models.py 파일의 수정사항을 적용하기 위한 준비 파일을 만드는 단계입니다

models.py 파일 수정

 

# models.py 파일을 아래처럼 수정합니다
from django.db import models
from django.core.validators import MaxValueValidator,MinValueValidator

# Create your models here.
class Patient(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30) 
    age = models.IntegerField(validators=[MinValueValidator(0),MaxValueValidator(120)])

 

프로젝트 레벨의 settings.py 파일을 수정 - 'office.apps.OfficeConfig',  추가할 것.

 

INSTALLED_APPS = [
    'office.apps.OfficeConfig', # <=== 이부분 추가함
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
~/my_site> python manage.py makemigrations office

 

(django) ~\my_site>python manage.py makemigrations office
Migrations for 'office':
  office\migrations\0001_initial.py
    - Create model Patient

 


(django) ~\my_site>python manage.py makemigrations office
Migrations for 'office':
  office\migrations\0001_initial.py # <== 새로운 파일이 생성되고 적용할 코드가 저장되어 있습니다
    - Create model Patient

 

 

# office\migrations\0001_initial.py 의 상세 내용

# Generated by Django 4.1.2 on 2022-10-28 11:56
import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Patient',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('first_name', models.CharField(max_length=30)),
                ('last_name', models.CharField(max_length=30)),
                ('age', models.IntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(120)])),
            ],
        ),
    ]

 

 

  • 여기서 실제로 파이썬이 실행하는 SQL 명령어가 궁금하시면 아래처럼 입력해 보시기 바랍니다.
(django) ~\my_site>python manage.py sqlmigrate office 0001
BEGIN;
--
-- Create model Patient
--
CREATE TABLE "office_patient" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL, "age" integer NOT NULL);
COMMIT;

(django) ~\my_site>

 

 

makemigrations 을 실행했다고 해서 DB에 변경사항이 바로 적용되는것은 아닙니다.

 

  • migrate 명령어를 한번 더 실행 - 지난번과 다르게 office 내용이 추가된것을 볼 수 있습니다.
(django) ~\my_site> python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, office, sessions
Running migrations:
  Applying office.0001_initial... OK

(django) ~\my_site>

 

 

실행 후, 실제 DB 를 열어보면 office_patient 테이블이 추가된 것을 볼 수 있다.

 

 

 

 

 

 

'Python > Django' 카테고리의 다른 글

[Django] DB - Update, Delete  (0) 2022.11.01
[Django] DB - Create(Insert), Read  (0) 2022.10.29
[Django] Django - 정적 파일  (0) 2022.10.27
[Django] Django - 사용자 정의 오류 템플릿  (0) 2022.10.27
[Django] Django - 상속(block)  (0) 2022.10.27