장고 시작하기 8 : 장고 Model 생성하기

들어가며

장고 Model“은 데이터베이스 테이블을 나타내는 Python 클래스입니다. 데이터베이스에 저장된 데이터의 구조와 동작을 정의할 수 있는거죠.

장고 Model의 장점은 데이터베이스에 구애 받지 않는다는 점 입니다. 장고 Model은 모델 정의를 수정하지 않고도 PostgreSQL, MySQL, SQLite, Oracle, MariaDB 등과 함께 작동 할 수 있는거죠.

장고 모델 참 편리해 보이네요…?

이번 포스트에서는 “장고 Model”을 어떻게 생성하는지 공부한 내용을 정리해보았습니다.

장고 Model 선언

models.py에서 테이블을 선언해 줄 수 있습니다.

models.py은 처음에는 빈 파일인데요. 여기에 클래스를 작성해서 테이블을 만들어 줍니다.

하나의 클래스가 하나의 테이블 입니다. 클래스는 models를 상속 받아서 만듭니다.

클래스 내의 각 속성은 테이블의 각 필드명이 됩니다.

models.Field type(옵션) 형태로 입력을 해줍니다.

아래 코드를 확인해주세요.

models.py

from django.db import models

# 하나의 클래스가 하나의 테이블
class Articles(models.Model):
    # 필드명 = models.필드타입(제약사항, 옵션)
    title = models.CharField(max_length=50)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

Note :

  • 장고의 모든 모델은 필드를 따로 명시해주지 않아도 id 필드값을 PK로 가지고 있습니다.
  • DateTimeField 에서 auto_now_add=True 인자는 레코드를 생성시 자동으로 해당 시간을 입력해줍니다.
  • DateTimeField 에서 auto_now=True 인자는 레코드를 수정시 자동으로 해당 시간을 입력해줍니다.

Field Type

많은 Field Type 들은 공식 문서에서 확인할 수 있으며, 지금은 당장 쓰일 것 같은 필드들을 몇개만 정리해보았습니다.

Field TypeDescriptionDefault Form Widget
CharField최대 길이의 문자열을 제한해서 저장TextInput
IntegerField정수 값을 저장NumberInput
FloatField부동 소수점 숫자를 저장NumberInput
BooleanFieldboolean (True/False) 값을 저장CheckboxInput
DateTimeField날짜 및 시간 값을 저장DateTimeInput
DateField날짜 값을 저장DateInput
TimeField시간 값을 저장TimeInput
TextField큰 텍스트 데이터를 저장Textarea
EmailField이메일 주소를 저장EmailInput
FilePathField서버에 파일 경로를 저장FilePathInput
GenericIPAddressFieldIPv4 또는 IPv6 주소를 저장TextInput
ImageField이미지 파일을 저장ClearableFileInput
JSONFieldJSON 데이터를 저장Textarea
SmallIntegerField작은 정수 값을 저장NumberInput
PositiveBigIntegerField1부터 9223372036854775807까지의 양수 64비트 정수 값을 저장NumberInput
PositiveIntegerField1부터 2147483647까지의 양의 정수 값을 저장NumberInput
PositiveSmallIntegerField1부터 32767까지의 작은 양의 정수 값을 저장NumberInput

마이그레이션

위에서 파이썬 코드로 만든 모델을 실제 DB에 반영하기 위해서는 2개의 명령어를 입력해줘야 합니다.

python manage.py makemigrations
python manage.py migrate

위 두 명령어를 포함 마이그레이션 관련된 명령어들을 아래에 정리하였습니다.

모델의 변경사항을 DB에 반영하기 위해 마이그레션을 만듭니다.

python manage.py makemigrations 

마이그레이션을 실제로 데이터에 반영해서 동기화 하는 과정입니다.

 python manage.py migrate

마이그레이션 목록과 적용 여부를 보여주는 명령어는 아래와 같습니다.

python manage.py showmigration

해당 마이그레이션이 어떤 sql문을 작성했는지 보여주는 명령어는 아래와 같습니다.

python manage.py sqlmigrate <app_name> <migration_no> 

자세한 사항은 아래 공식 Docs에서 확인 할 수 있습니다.

https://docs.djangoproject.com/en/4.2/topics/migrations/

sqlite 확인하기

장고는 내부적으로 sqlite로 연결되어 있습니다. 프로젝트 디렉토리의 db.sqlite3 파일이 SQLite 입니다.

VS code를 사용한다면 SQLite를 설치해준 다음 명령 팔레트에서 SQLite: Open Database 를 실행합니다.

현재 프로젝트의 DB 파일을 선택해줍니다.

정상적으로 실행이 된다면 VS code의 왼쪽 하단에 SQLITE EXPLORER 패널이 추가된 것을 확인 할 수 있습니다.

Open Databse 실패시

만일 정상 실행이 안된다면, migration 실행 여부, 리눅스 환경에서 SQLite3의 설치 여부를 확인해주세요.

“SQLite process failed to start: The argument ‘file’ cannot be empty. Received ” 오류 메시지 시에 SQLite3 미설치가 원인이므로, 우분투의 경우, 아래 명령어를 입력해줍니다.

sudo apt install sqlite3

SQLITE EXPLORER 패널을 클릭하면 장고 내에 생성된 테이블들을 볼 수 있습니다.
장고에서 기본적으로 생성되는 테이블은 제외하고 저희가 이번에 만든 articles app의 articles 테이블도 확인할 수 있습니다.

서버에서 DB 접속하는 게 아니고 DBeaver도 아니고 VScode에서 이런식으로 DB를 볼 수도 있었네요… 신세계…

참고하면 좋은 글

Model field reference | Django documentation | Django (djangoproject.com)

Leave a Comment

목차