이번에는 DB 모델링 부분이 추가된 migrate 에 대해서 알아보겠습니다.
지난번 절차에서 DB 관련 모델링부분(models.py)이 추가되어 진행결과가 조금 다른 부분이 있으니 이 부분을 집중하시기 바랍니다.
2022.10.25 - [Python/Django] - [Django] Django - (맛보기 migrate)App별 template 디렉토리
- 간단하게 프로젝트와 앱을 생성하겠습니다.
> 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 |