All Articles

Query 알아보기

query ?

장고는 QUERY를 몰라도 사용이 가능하도록 ORM (Object Relation Mapping) 을 통해 데이터 베이스를 선택한다.

왜? DB 에서 사용하는 언어와, 객체지향 프로그래밍의 언어가 서로 다르기 때문에 ORM이 이를 중간에서 매개하는 역할을 한다.

그래서 개발자는 Query 처리를 위해 Query문법을 배울 필요없이 기존 사용하던 언어로 Query를 사용 할 수 있다.

직접 쿼리를 입력하는것, 장고를 이용하는것을 비교해보자.

id name email age contact
1 한바름 barum@mail.com 30 010-1234-1234

위 와 같은 데이터를 가진 User 라는 DB table 있다. 기본 데이터 처리 C.R.U.D. (Create, Read, Update, Delete) 를 해보자.

  • 새로운 User 정보 입력
#Query
INSERT INTO User 
VALUES('한바름2','barum2@mail.com','22','010-2234-2234'); 
#Query문은 ";"으로 마무리를 꼭 해줘야 작동한다.
#Django
User.objects.create(name="한바름2", email="barum2@mail.com", 
										age="22", contact="010-2234-2234")
또는

User(name="한바름2", email="barum2@mail.com", age="32", 
     	contact="010-2234-2234").save() 
  • id=2 의 name 불러오기
#Query 
SELECT name FROM USER WHERE id = 2;
==> 한바름2
#Django
User.objects.get(id=2).name
==> 한바름2
  • 한바름2 ==> 한바름3 으로 바꾸기
#Query
UPDATE User SET name=한바름3 WHERE id=2;
#Django
user = User.objects.get(id=2)
user.name = '한바름3'
user.save() 
  • 한바름3이 들어간 row 지우기
#Query
DELETE FROM User WHERE id = 3;
#Django
User.objects.get(id=2).delete()

기본 처리는 어렵지 않으나 DB가 가지고 있는 표현이나 계산들을 사용하기 위해서는 별도의 문법을 공부해야만 한다.

테이블에서 중복되는 값을 가져올 경우

UserHomepage 테이블에서 User의 name을 불러오기

User

id name email age contact
1 한바름 barum@mail.com 30 010-1234-1234
2 한바름3 barum2@mail.com 22 010-2234-2234

UserHomepage

id user_id homepage
1 1 Barum
2 2 Barum3
#Query
SELECT name
FROM UserHomepage
LEFT JOIN User
ON UserHomepage.user_id = User.id
WHERE User.id = 1;
#Django
UserHomepage.objects.select_related('user').get(id=1).name