๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/Django

Django_์žฅ๊ณ  ๋ถ€์ˆ˜๊ธฐ (3)_QuerySet

by KASSID 2022. 6. 30.

๋ชฉ์ฐจ

    728x90

    Django QuerySet(์ฟผ๋ฆฌ์…‹)

    DB์˜ ๊ฐ์ฒด๋“ค์„ ํ…œํ”Œ๋ฆฟ์—์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์ด์šฉํ•˜๋Š” '๊ฐ์ฒด์˜ ์ง‘ํ•ฉ'์ด๋‹ค.

    ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•˜์—ฌ ํ•„ํ„ฐ๋ง์„ ํ•˜๊ฑฐ๋‚˜ ์ •๋ ฌ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    DB(SQL)์—์„œ๋Š” row์— ํ•ด๋‹นํ•˜๊ณ , ํŒŒ์ด์ฌ ์ฝ”๋“œ๊ฐ€ SQL๋กœ ๋งคํ•‘๋˜์–ด

    QuerySet์ด๋ผ๋Š” ์ž๋ฃŒ ํ˜•ํƒœ๋กœ ๊ฐ’์ด ๋„˜์–ด์˜จ๋‹ค.

    ์žฅ๊ณ  Shell

    ์žฅ๊ณ  ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฝ˜์†”(interactive console)๋ฅผ ์ด์šฉํ•˜์—ฌ

    ์ฟผ๋ฆฌ์…‹์— ๋Œ€ํ•œ ๊ฐ’์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ํ•ด๋‹น ์ฝ˜์†”์—์„œ๋Š” ์žฅ๊ณ ์˜ ๋ช…๋ น์–ด์™€ ํŒŒ์ด์ฌ์˜ ๋ช…๋ น์–ด ๋“ฑ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    python manage.py shell

     

    ๋จผ์ € models.py์—์„œ ์›ํ•˜๋Š” ๋ชจ๋ธ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

    from blog.models import Post

     

    1. ๋ชจ๋“  ๊ฐ์ฒด ๋ฐ˜ํ™˜

    Post.objects.all()

     

    2. ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ

    ํ•„์š”์— ๋”ฐ๋ผ User๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ฐ€์ ธ์˜จ๋‹ค.

    from django.contrib.auth.models import User

    ์œ ์ € ๊ฐ์ฒด๋„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

    User.objects.all()
    --------
    # ๊ฐ์ฒด ํ•˜๋‚˜ ์ƒ์„ฑ
    me = User.objects.get(username='user1')
    
    # ํ•œ ๊ฐ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ
    me = User.objects.get(username='user1')

    ex)์šฐ๋ฆฌ ํ•˜๋‚˜ ํ•˜๋ฉด

    Post.objects.create(author=me, title='Sample title', text='Test')

    ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ create()๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ, ๊ฐ์ฒด์˜ ๋ฉค๋ฒ„๋“ค์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.

     

    3. ํ•„ํ„ฐ๋ง

    filter()์— ์กฐ๊ฑด์„ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜์—ฌ ํ•„ํ„ฐ๋ง์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ex)

    Post.objects.filter(author=me)

    '__contains' ๋Š” ์—ฐ์‚ฐ์ž๊ณผ ํ•„ํ„ฐ๋กœ ํ•„๋“œ๋ช… ๋’ค์— ๋ถ™์—ฌ์ฃผ๋ฉด ์›ํ•˜๋Š” ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    Post.objects.filter(title__contains='title')

    ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ด์šฉํ•  ๋•Œ๋Š” timezone์„ ๊ฐ€์ ธ์˜จ๋‹ค.

    from django.utils import timezone
    Post.objects.filter(published_date__lte=timezone.now())

     

    4. ์ •๋ ฌ

    order_by()ํ•จ์ˆ˜๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค.

    #์˜ค๋ฆ„์ฐจ์ˆœ
    Post.objects.order_by('created_date')
    #๋‚ด๋ฆผ์ฐจ์ˆœ
    Post.objects.order_by('-created_date')

     

    5. ๋ณ‘ํ•ฉ

    ์ฟผ๋ฆฌ์…‹์€ ์œ„์—์„œ ๋‹ค๋ฃฌ ๊ฒƒ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    QuerySet ์ถ”๊ฐ€์ž๋ฃŒ

    (https://docs.djangoproject.com/en/2.0/ref/models/querysets/)

    ๋Œ“๊ธ€