ORM을 찍어보기 위해 현재 진행하던 프로젝트 데이터를 활용했다
데이터베이스는 sqlite3
를 사용했고 Q 객체
를 사용하기 위해서는 먼저 from django.db.models import Q
를 해준다
# SQL 쿼리문
sqlite> select * from Banks where id=4;
4|카카오뱅크
filter()
메소드 사용)# Django ORM
In [21]: Bank.objects.filter(id=4)
Out[21]: 2021-11-12 13:21:25,726 DEBUG (0.000)
SELECT "banks"."id",
"banks"."name"
FROM "banks"
WHERE "banks"."id" = 4
LIMIT 21;
args=(4,)
<QuerySet [<Bank: Bank object (4)>]>
# Django ORM Q객체
In [22]: Bank.objects.filter(Q(id=4))
Out[22]: 2021-11-12 13:25:31,596 DEBUG (0.000)
SELECT "banks"."id",
"banks"."name"
FROM "banks"
WHERE "banks"."id" = 4
LIMIT 21;
args=(4,)
<QuerySet [<Bank: Bank object (4)>]>
다음 두 문장은 같은 데이터를 뽑아온다
# SQL 쿼리문
select * from Banks where id=4;
# Django ORM Q객체
Bank.objects.filter(Q(id=4))
SQL 쿼리문 | Django ORM | |
---|---|---|
교집합(and) | where 조건 and 조건 | & |
합집합(or) | where 조건 or 조건 | | |
# Django ORM Q객체 &(and)
In [23]: Bank.objects.filter(Q(id=2) | Q(id=4))
Out[23]: 2021-11-12 13:40:16,393 DEBUG (0.007)
SELECT "banks"."id",
"banks"."name"
FROM "banks"
WHERE ("banks"."id" = 2 OR "banks"."id" = 4)
LIMIT 21;
args=(2, 4)
<QuerySet [<Bank: Bank object (2)>, <Bank: Bank object (4)>]>
# Django ORM Q객체 |(or)
In [26]: Bank.objects.filter(Q(id=2) & Q(id=4))
Out[26]: 2021-11-12 13:42:26,443 DEBUG (0.001)
SELECT "banks"."id",
"banks"."name"
FROM "banks"
WHERE ("banks"."id" = 2 AND "banks"."id" = 4) LIMIT 21;
args=(2, 4)
<QuerySet []>