query ?
장고는 QUERY를 몰라도 사용이 가능하도록 ORM (Object Relation Mapping) 을 통해 데이터 베이스를 선택한다.왜? DB 에서 사용하는 언어와, 객체지향 프로그래밍의 언어가 서로 다르기 때문에 ORM이 이를 중간에서 매개하는 역할을 한다.
그래서 개발자는 Query 처리를 위해 Query문법을 배울 필요없이 기존 사용하던 언어로 Query를 사용 할 수 있다.
직접 쿼리를 입력하는것, 장고를 이용하는것을 비교해보자.
id | name | age | contact | |
---|---|---|---|---|
1 | 한바름 | barum@mail.com | 30 | 010-1234-1234 |
위 와 같은 데이터를 가진 User 라는 DB table 있다. 기본 데이터 처리 C.R.U.D. (Create, Read, Update, Delete) 를 해보자.
#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()
#Query
SELECT name FROM USER WHERE id = 2;
==> 한바름2
#Django
User.objects.get(id=2).name
==> 한바름2
#Query
UPDATE User SET name=한바름3 WHERE id=2;
#Django
user = User.objects.get(id=2)
user.name = '한바름3'
user.save()
#Query
DELETE FROM User WHERE id = 3;
#Django
User.objects.get(id=2).delete()
기본 처리는 어렵지 않으나 DB가 가지고 있는 표현이나 계산들을 사용하기 위해서는 별도의 문법을 공부해야만 한다.
테이블에서 중복되는 값을 가져올 경우
UserHomepage 테이블에서 User의 name을 불러오기
User
id | name | 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