목차1. ORM(Object_Relational_Mapping) 이란?
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를 사용하기 때문에
- User와 Category 를 먼저 생성하고
- 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 가져오기
데이터를 다루는 다른 방법들과 특징(현재단계에서 부적절한 이유)
- 실제로 게시판 서비스를 (간단하게) 만들고 데이터를 다루기
- 개발초기과정에서 부적절
- sql 관련 툴(GUI)로 데이터를 다루기
- query 문을 몰라도 작업하기 편하지만 개발과정을 알수없음
- admin 을 활성화 시키고 추가하기
- 현재단계에서는 admin 미설정
'Develop' 카테고리의 다른 글
[DRF 게시판만들기] #4 GenericAPIView & Urls (0) | 2022.03.29 |
---|---|
[DRF 게시판만들기] #3 Serializer, ModelSerializer 개념 및 역할 (0) | 2022.03.20 |
[DRF 게시판만들기] #2 Setting, Modeling (0) | 2022.03.06 |
[DRF 게시판만들기] #1 Intro (0) | 2022.02.27 |
[GITHUB] 초간단_파이참에서 GIt clone 하는 방법 (0) | 2021.09.29 |