[Django] ORM 정리
ORM(Object Relational Mapping)
- 객체(Object)와 관계형 데이터베이스의 데이터를 매핑해주는 과정을 의미한다.
- 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 SQL 쿼리문 없이도 데이터베이스의 데이터들을 다룰 수 있다.
Django의 model은 ORM 역할을 한다. 즉, SQL을 직접 작성하지 않아도 model을 통해 데이터 베이스로 접근이 가능하다.
-
Django에서 지원하는 model 필드 타입
- AutoField, BooleanField, CharField, DateTimeField, FileField, ImageField,TextField
-
Django에서 지원하는 주요 필드 옵션
- null (DB 옵션) : DB 필드에 NULL 허용 여부 (디폴트 : False)
- unique (DB 옵션) : 유일성 여부 (디폴트 : False)
- blank : 입력값 유효성 (validation) 검사 시에 empty 값 허용 여부 (디폴트 : False)
- default : 디폴트 값 지정. 값이 지정되지 않았을 때 사용
- verbose_name : 필드 레이블. 지정되지 않으면 필드명이 쓰여짐
- validators : 입력값 유효성 검사를 수행할 함수를 다수 지정
- 각 필드마다 고유한 validators 들이 이미 등록되어있기도 함
- 예 : 이메일만 받기, 최대길이 제한, 최소길이 제한, 최대값 제한, 최소값 제한 등
- choices (form widget 용) : select box 소스로 사용
- help_text (form widget 용) : 필드 입력 도움말
- auto_now_add : Bool, True 인 경우, 레코드 생성시 현재 시간으로 자동 저장
그래서 이번에는 ORM을 이용해서 데이터를 다루는 방법을 알아보았다. 여기에서 내가 개발할 때 사용한 데이터 모델은 Template이라는 모델이다.
-
Template
upload_files(파일 저장 경로), name(파일명), description(파일 설명), uploaded_at(파일 업로드 일자), id (파일 인덱스)
class Template(models.Model):
upload_files = models.FileField(blank=False, null=False)
name = models.CharField(max_length = 50)
description = models.CharField(max_length=200)
uploaded_at = models.DateTimeField(auto_now_add=True)
id = models.AutoField(primary_key=True)
class Meta:
# table name
db_table = 'Templates_info'
📎 데이터 가져오기
objects.all() : Template 객체에 저장된 데이터를 모두 가져올 수 있다.
Template.objects.all()
objects.get() : Template 객체 중에서 특정 조건을 만족하는 데이터를 가져올 수 있다.
Template.objects.get(id=1)
📎 데이터 생성하기
- objects.create() : Template 객체에 정의된 각각의 필드에 데이터를 넣어 새로운 데이터를 추가할 수 있다.
>>> template = Tempalte()
>>> template.name = 'openstack instance'
>>> template.description = 'test'
.....
>>> template.save()
📎 데이터 삭제하기
- 원하는 필드를 이용해서 객체를 삭제할 수 있다.
>>> d = Tempalte.objects.get(name='openstack instance')
>>> d.delete()
ORM은 REST API를 개발하는 데 아주 유용했다. 복잡한 SQL 쿼리를 사용하지 않고도 데이터를 관리하는 것이 가장 큰 장점이였다.
하지만 ORM에 너무 의존하면 안될 것 같다. 자칫하다간 SQL 쿼리문과 DB에 대한 공부를 소홀히 할 수 있을 것 같다.
Author And Source
이 문제에 관하여([Django] ORM 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyun0820/Django2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)