일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- js
- form
- 알고리즘 연습
- HTML
- java
- MAC
- 파이썬
- 알고리즘 문제
- Django
- PYTHON
- Git
- CSS
- react
- 장고
- 백준
- AWS
- Baekjoon
- javascript
- web
- API
- 파이썬 알고리즘
- c++
- 알고리즘 풀이
- es6
- Algorithm
- DRF
- django ORM
- django widget
- 알고리즘
- django rest framework
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] model 더 알아보기, ORM, model의 option, migrate 본문
model
에 대한 두 번째 포스팅입니다. 저번 포스팅은 django 를 처음 공부하면서 정말 기본적인 내용에 썼다면, 이번에는 공부하면서 좀 더 필요하다고 생각이 된 부분들에 대해서 새롭게 추가해보았습니다.
ORM 이란?
ORM 이란 object-relational mapping
의 줄임말로서 영어 그대로 해석하면 객체의 관계를 연결해주는 것을 뜻합니다. 데이터베이스는 SQL 로 관리를 하게 되는데 DJango 같은 경우, 파이썬 코드와 SQL 를 매핑 시켜줌으로서 파이썬 코드로도 쉽게 데이터베이스를 다룰 수 있게 됩니다. 좀 더 정확히 말하자면 데이터베이스 테이블
과 models.py 의 파이썬 클래스
를 1대1로 매핑하게 됩니다. 장고의 장점 중 하나로도 ORM 기능이 지원되는 점이 뽑힐 만큼 매력적인 부분입니다.
자주 쓰는 필드의 option
model 에서 여러 필드를 정의할 수 있습니다. 필드를 정의 할 때 여러 option을 정해줌으로서 더 유연하게, 더 엄격하게 작성할 수 있습니다. 각 필드의 종류마다 사용되는 option이 다르지만 공통적으로 많이 쓰는 option 에 대해서 정리해보았습니다.
-
blank : empty 허용 여부 ( 기본 값은 false)
-
null : DB 기준으로 null 허용 여부 ( 기본 값은 false)
-
CharField
와TextField
같은 문자열 기반 필드에서는null=True
를 지양합니다.이럴 경우, 데이터가 없는 경우에 대해서
None
값과,빈 문자열
을 가지는 2가지 경우가 생겨버려서 문제가 생깁니다. 따라서 django 의 경우, Null 이 아닌 빈 문자열을 하기로 약속했기에null=True
는 쓰지 않으시는 걸 추천합니다.
-
-
db_index : DB 기준으로 인데스 필드 여부, index 로 값에 접근 가능 ( 기본 값은 false)
-
default : 값이 입력되지 않았을 때 어떤 값이 기본값으로 들어갈지 지정
-
unique : DB 기준으로 현재 테이블 내에서 유일성 여부 ( 기본 값은 false)
-
validatiors : validators 를 수행할 함수를 다수 지정
-
verbose_name : 필드 레이블 (기본 값은 필드명)
-
help_text : 필드 입력 도움말
blank 와 null 은 헷갈리기 쉬운 개념입니다.
blank
는 입력을 받는 상황에서 비어있는 값이 입력이 될 수 있는지를 판단하는 옵션입니다.
null
은 위에서 언급한대로, DB에서의 필드로서 NULL이 들어갈 수 있는지를 판단하는 옵션입니다.
공통적으로 사용 되지는 않지만, 날짜 및 시간에 자주 사용되는 옵션도 있습니다.
class Item(models.Model):
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
필드의 이름에서 눈치 채셨을 수도 있지만 auto_now_add
은 객체가 만들어지는 순간의 시간이 저장되고 auto_now
는 객체의 값이 갱신될 때마다 새로 시간이 저장됩니다.
migrate 더 알아보기
저번 포스팅에서도 다뤆지만 migrate
는 migration 파일을 db 에 적용시키는 명령어 였습니다. 좀 더 나아가서 여러 활용법을 알아보도록 하겠습니다.
-
sqlmigrate
migrate
는 migration 파일을 db에 적용시키는 명령어 였다면,sqlmigrate
는 그 이전에 테스트 하는 명령입니다. 아래 명령어를 통해 sql 을 확인할 수 있고 개발자의 의도에 맞게 생성이 되었는지 판단의 척도가 됩니다.python manage.py sqlmigrate {앱이름} {migrations 파일 번호} # 예시 python manage.py sqlmigrate myapp 0002
여기서 migrations의 파일이름을 전부 기재해주는게 원칙이지만 파일이름의 일부만을 사용해도 같으 효과를 가져올 수 있습니다. 단 다른 파일과 중복되게 일부만 기재해주는 건 문제가 발생합니다.
-
migrate
migrate
를 통해 migration 파일로 db 설정을 최신화 하기도 하지만, 뒤에 파일 번호를 추가해서 해당 파일로 갱신하기도 합니다. 예를 들어 현재 4번까지 migration 파일이 생성되었고 현재 적용 상태가 3번이라도 0002 를 migrate 한다면 과거의 설정 상태로 바뀌게 된다.python manage.py migrate {앱이름} {migration 파일 번호}
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django] 데이터베이스 조회, queryset (4) | 2019.07.18 |
---|---|
[Django] admin 페이지 효율적으로 다루기 (1) | 2019.07.17 |
[Django] visual studio code 를 이용한 debug (0) | 2019.07.14 |
[Django] Channels, 비동기적 채팅 구현하기 - WebSocket (3) (2) | 2019.07.11 |
[Django] Channels, 비동기적 채팅 구현하기 - WebSocket (2) (4) | 2019.07.11 |