[TIL_Carrotww] 67 - 22/12/07

μœ ν˜•μ„Β·2022λ…„ 12μ›” 8일
0

TIL

λͺ©λ‘ 보기
79/138
post-thumbnail

πŸ“Carrotww의 μ½”λ”© 기둝μž₯

🧲 Django ORM values() & values_list()

πŸ” values() : 쿼리셋을 λ¦¬μŠ€νŠΈμ—μ„œ λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ λ°˜ν™˜ν•œλ‹€.

temp = User.object.filter(id=2).values()
or
temp = User.object.values().filter(id=2)

두 가지 ν˜•νƒœλ‘œ λ‹€ κ°€λŠ₯ν•˜λ‹€.
values() λ©”μ†Œλ“œμ— ν•„λ“œλͺ…을 λ„£μœΌλ©΄ ν•΄λ‹Ή ν•„λ“œλͺ…κ³Ό 값을 κ°€μ Έμ˜¬ 수 μžˆλ‹€

temp = User.objects.filter(hobby='좕ꡬ').values('email')
# <QuerySet [{'email': 'root@naver.com'}]>

πŸ” values_list() : 값을 νŠœν”Œ ν˜•νƒœλ‘œ λ°˜ν™˜ν•œλ‹€.

temp = User.object.filter(id=2).values_list()
or
temp = User.object.values_list().filter(id=2)

values_list() λ©”μ†Œλ“œμ— ν•„λ“œλͺ…을 λ„£μœΌλ©΄ ν•΄λ‹Ή ν•„λ“œλ§Œ κ°€μ Έμ˜¨λ‹€.

temp = User.objects.filter(hobby='좕ꡬ').values_list('email')
# <QuerySet [('root@naver.com',)]>

λ˜ν•œ values_list() λŠ” ν•„λ“œ 이외에 flat 인자λ₯Ό μ‚¬μš©ν•  수 μžˆλŠ”λ° flat 은 Boolean νƒ€μž…μ΄λ©° defaultλŠ” False이닀.
flat을 μ‚¬μš©ν•΄μ£Όλ©΄ νŠœν”Œμ΄ μ•„λ‹Œ 리슀트 ν˜•νƒœλ‘œ ν•„λ“œκ°’μ„ λ°˜ν™˜ν•˜λ©° ν•„λ“œ μΈμžκ°€ μ—¬λŸ¬κ°œ μΌλ•ŒλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

User.objects.filter(hobby='좕ꡬ').values_list('email', flat=True)
# <QuerySet ['root@naver.com']>

🧲 Django-ORM λ©”μ†Œλ“œ

1. filter()

  • exact
    μΌμΉ˜ν•˜λŠ” 쑰건을 μž…λ ₯ν•  λ•Œ μ‚¬μš©
Article.objects.filter(title__excact='titletest')
Article.objects.filter(title__iexcact='titletest')
# iexactλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό ꡬ뢄 X
  • contains
    λΆ€λΆ„ 일치 쑰건 μž…λ ₯ν•  λ•Œ μ‚¬μš©
Article.objects.filter(title__contains='titletest')
Article.objects.filter(title__icontains='titletest')
# icontainsλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό ꡬ뢄 X
  • in
    μ—¬λŸ¬ 쑰건을 포함할 경우 μ‚¬μš©
Article.objects.filter(title__in=['titletest','titletest22'])
  • gt / lt / gte / lte

gt (greater than) : >
lt (less than) : <
gte (greater than or equal) : >=
lte (less than or equal) : <=

Article.objects.filter(date__gt=datetime.date(2022.12.07)
Article.objects.filter(date__lt=datetime.date(2022.12.07)
  • startswith / endswith
    startswith : 쑰건으둜 μ‹œμž‘ν•˜λŠ” λ¬Έμžμ—΄ 검색
    endswith : 쑰건으둜 λλ‚˜λŠ” λ¬Έμžμ—΄ 검색
Article.objects.filter(title__startswith="startword")
  • union
    두 개 μ΄μƒμ˜ 쿼리셋 λ³€μˆ˜λ₯Ό ν•˜λ‚˜μ˜ 쿼리셋 κ°’μœΌλ‘œ ν•©μΉœλ‹€.
temp1 = Article.objects.filter(title__exact="testtitle1")
temp2 = Article.objects.filter(title__exact="testtitle2")
temp3 = union(temp1, temp2)
  • intersection()
    κ΅μ§‘ν•©μœΌλ‘œ 두 개 μ΄μƒμ˜ 쿼리셋 λ³€μˆ˜ 쀑 μ€‘λ³΅λœ 값을 가지고 μ˜¨λ‹€
temp1 = Article.objects.filter(title__in=["testtitle1", "testtitle2"])
temp2 = Article.objects.filter(title__in=["testtitle1", "testtitle3"])
temp3 = intersection(data1, data2)

title 이 soohyun인 데이터λ₯Ό 가지고 μ˜¨λ‹€.

🧲 λŠλ‚€μ 

πŸ” ORM은 κ·Έλ•Œκ·Έλ•Œ μ°Ύμ•„κ°€λ©΄μ„œ ν•˜κ±°λ‚˜ filter, get, all μ •λ„λ§Œ μ‚¬μš©ν•˜μ˜€λŠ”λ° μ΄λ ‡κ²Œ 정리λ₯Ό ν•΄λ†“μœΌλ‹ˆ 문제λ₯Ό λ§žμ΄ν–ˆμ„λ•Œ μ–΄λ–€ 것을 μ¨μ„œ μ–΄λ–€μ‹μœΌλ‘œ ν’€μ–΄λ‚˜κ°€μ•Ό 할지 머리속에 정리가 됐닀.
μ§€κΈˆ user, chatroom, chatlog 3개의 λͺ¨λΈμ„ 보며 데이터λ₯Ό μΆ”μΆœν•΄μ•Ό ν•˜λŠ” 과정이 μ‰½κ²Œ μƒκ°λ‚˜μ§€ μ•Šμ•„ 글을 μ“°λ©° μ°¨λΆ„ν•˜κ²Œ μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.
μ—­μ‹œ filter만 잘 μ“°κ³  unionμ΄λ‚˜ chain μ •λ„λ§Œ 잘 써도 νŠΉλ³„ν•œ λ¬Έμ œλŠ” 없을 것 κ°™λ‹€.
μ•Œκ³ λ¦¬μ¦˜μ„ λͺ»ν‘Όμ§€ 2μ£Ό κ°€κΉŒμ΄ λ˜μ–΄κ°€κ³ μžˆλŠ”λ° db μ‘°μž‘μ„ ν•˜λ©΄μ„œ μ•Œκ³ λ¦¬μ¦˜μ„ ν‘ΈλŠ”κ²ƒ 같은 기뢄이 λ“€μ–΄ ν₯λ―Έλ‘­κ³  μž¬λ°Œλ‹€ γ…Žγ…Ž
였늘 끝!

profile
Carrot_hyeong

0개의 λŒ“κΈ€