본문 바로가기
Develop

[DRF 게시판만들기] #2.1 ORM, Python Shell 로 Data생성하기

by hongreat 2022. 3. 12.
목차

1. ORM(Object_Relational_Mapping) 이란?

 

2. Python Shell 사용법

 

3. Model Data 다루기

 

4. ORM코드 및 정리

 

1. ORM(Object_Relational_Mapping) 이란?

  • db와 소통하는 백엔드(django)는 바로 orm 을 사용해서 query를 요청하여
    데이터를 생성하고, 읽고, 수정하고, 삭제할 수 있게 되는 것 입니다. (CRUD)
    (query는 데이터베이스에 코드로 요청을 보내는 것 입니다.)
  • django에서 db는 기본적으로 sqlite3를 사용합니다. 실무와 어느정도 데이터를 다루는 일반적인 프로젝트에서는 postgreSQL, MySQL, MariaDB등의 SQL 을 사용하는 데이터베이스를 많이 활용합니다.

 

 

2. Python Shell 사용법

  • 모델상황

앞에서 만든 게시판의 모델을 활용해서 데이터를 다뤄보겠습니다.

모델은 User(유져)와 Post(게시글), Category(카테고리) 였습니다.

Post 모델에서 category와 user를 사용하기 때문에

  1. User와 Category 를 먼저 생성하고
  2. Post 를 만들어 보겠습니다.
  • python shell 사용
  • 파이참의 터미널에서 다음 코드를 실행하여 python shell을 입력할 수 있습니다.
python manage.py shell

 

 

 

3. Model Data 다루기

shell을 켠 상태에서 모델을 import 하고 create하면 됩니다.

  • 생성 예제 코드
>>> from user.models import User   #모델 불러오기
>>> User.objects.create(email:'test@test.com', nickname='test', first_name='est', last_name='t', phone'010-0000-1234') #모델 생성하기

이렇게 하면 아주 간단하게 데이터가 생성됩니다.

 

확인하는 방법은 다음과 같습니다. 

  • 확인하는 방법 예제코드
>>> User.objects.all()  # User 모델의 모든 데이터를 가져오기
<QuerySet [<User: test@test.com>]>  
>>> User.objects.all().values()  # User 모델의 데이터가 갖는 값들 가져오기
<QuerySet [{'id': 1, 'email': 'test@test.com', 'nickname': 'test', 'first_name': 'est', 'last_name': 't', 'phone': '010-0000-1234'}]>  
>>> User.objects.get(id=1) # User 모델의 첫번째 값을 가져오기
<User: test@test.com>

 

 

 

  • category 생성 및 확인
>>> from board.models import Post,Category
>>> Category.objects.create(catefory_name=test)
>>>Category.objects.create(category_name='test')
<Category: test>
>>> Category.objects.all()
<QuerySet [<Category: test>]>

 

 

Post(게시글) 의 경우 foreignkey 필드로 사용합니다.

모든 모델은 기본적으로 ‘_id’ 라는 값을 갖는 특성이 있습니다.

 

따라서 Post 모델 생성시에 user와 category는 ‘_id’를 지정해서 생성해줍니다.

(user_id=1 은 첫번째 유저를 말합니다.)

  • 생성 및 확인 예제 코드 
>>> from board.models import Post
>>> Post.objects.create(user_id=1, category_id=1,title='title_test!', content='게시물의 내용을 테스트하다!')
<Post: title_test!>
>>> Post.objects.all()
<QuerySet [<Post: title_test!>]>
>>> Post.objects.all().values()
<QuerySet [{'id': 1, 'user_id': 1, 'category_id': 1, 'title': 'title_test!', 'content': '게시물의 내용을 테스트하다!'}]>

 

4. ORM코드 및 정리

python (shell)로 data 다루기

간단한 확인, 테스트에서 편리하고, query를 직접 만들기 때문에 이해하기 편하며, 개발시에도 사용

 

 

ORM에서 get과 filter의 차이점

get과 filter는 자주쓰이기 때문에 헷갈리지 않게 해야합니다.

  • get(id=123) 은 123 의 id 값을 갖는 객체를 반환.
    • 따라서 .get(id=’123’).content 등의 입력이 가능합니다. → 결과값 : 123번 id를 갖는 내용을 갖고오기
  • filter(id=123) 은 123의 id 값을 갖는 쿼리셋을 반환 합니다.
Model이름.objects.create() # 생성

Model이름.objects.all() # 전부 가져오기

Model이름.objects.get() # 조건에 맞는 객체 가져오기

Model이름.objects.filter() # 조건에 맞는 queryset 가져오기

 

 

데이터를 다루는 다른 방법들과 특징(현재단계에서 부적절한 이유)

  1. 실제로 게시판 서비스를 (간단하게) 만들고 데이터를 다루기
    • 개발초기과정에서 부적절
  2. sql 관련 툴(GUI)로 데이터를 다루기
    • query 문을 몰라도 작업하기 편하지만 개발과정을 알수없음
  3. admin 을 활성화 시키고 추가하기
    • 현재단계에서는 admin 미설정