Django ORM # ๐Ÿš€๐Ÿš€

ddalkigumยท2020๋…„ 12์›” 8์ผ
3

Django

๋ชฉ๋ก ๋ณด๊ธฐ
4/4
post-thumbnail

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์‚ฌ์šฉ

distinct

๊ณ ์œ ํ•œ ํ•„๋“œ๊ฐ’์„ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ
๋งŒ์•ฝ์— ์œ ์ €๋„ค์ž„์ด ์œ ๋‹ˆํฌํ•œ ์‚ฌ๋žŒ์„ ์ฐพ๋Š”๋‹ค ๊ฐ€์ •ํ•œ๋‹ค๋ฉด

queryset = models.User.objects.all().filter(username="admin")

์ด๋Ÿฐ์‹์œผ๋กœ ์ฐพ์„ ์ˆ˜๋„ ์žˆ๊ฒŸ์ง€๋งŒ
ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š”๊ฒŒ ์•„๋‹Œ ๊ทธ๋ƒฅ ์œ ๋‹ˆํฌํ•œ ๊ฐ’๋งŒ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด
์ €๋ฒˆ์—์— ์‚ฌ์šฉํ–‡๋˜ annotate๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฐพ์•„์ฃผ๋ฉด ๋œ๋‹ค .

queryset = User.objects.values(
    'username'
).annotate(
    name_count=Count('username')
).filter(name_count=1)

์œ„์—์„œ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์ด๋ฉฐ, count๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฑธ ์ฐพ์•„์ฃผ๋ฉด
์ฟผ๋ฆฌ์…‹์„ ์ฐพ์•„์ค„ ์ˆ˜ ์žˆ๋‹ค.


Q์ด์šฉํ•˜๊ธฐ

์ €๋ฒˆ์— ๋ดค๋˜ or ๊ณผ and ๋ฅผ ์‚ฌ์šฉํ•˜๋“ ๋ฐ ์žˆ์–ด
์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•ด ์ค€๋‹ค.

์žฅ๊ณ  ์ฟก๋ถ์—์„œ๋Š” ์ด๋Ÿฐ์‹์œผ๋กœ ์„ค๋ช…์ด ๋‚˜์™€์žˆ์–ด์„œ
์ •ํ™•ํžˆ Q๊ฐ€ ์–ด๋–ค ์šฉ๋„๋กœ ์“ฐ์ผ๊นŒ ๊ถ๊ธˆํ–ˆ๋‹ค

๊ทธ๋ž˜์„œ ์œ„ ์ฝ”๋“œ์—์„œ... ์œ„์ฝ”๋“œ?

์•”ํŠผ ์œ„์— ์ฝ”๋“œ์—์„œ Q๋ฅผ ์ œ๊ฑฐํ•œ ์ƒํƒœ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค๋‹ค

?? ๋” ์ด์ƒํ–ˆ๋‹ค
๋ญ์ง€??

Q๊ฐ€ ๋ญ˜๊นŒ ์ฐพ๋˜์ค‘์— ๋‹ต์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

์œ„์— ๋‘๊ฐœ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์ œ์ผ ์ฒ˜์Œ ์ ์—ˆ๋˜ ์ฝ”๋“œ๋ณด๋‹ค ์›”์”ฌ ๊ฐ„๋‹จํ•œ๋ฐ

์ œ์ผ ๋ฐ‘์— ์ฝ”๋“œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ, ๋ฐ”๋กœ ์œ„์˜ ์ฝ”๋“œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
Q๊ฐ€ ๋ฌถ์–ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ๊ฐ™๋‹ค.

์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ๋งค์ง์ด๋‹ค

aggregate

์ฝ”๋“œ๋ฅผ ์ง‘๊ณ„๋‚ด ์ฃผ๋Š” ํ•จ์ˆ˜ ์ด๋‹ค.

์š”๋Ÿฐ์‹์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
orm์„ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ๋‚ด๊ฐ€ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์— ์ ์šฉ ์‹œ์ผœ๋ณธ๊ฒŒ ๋ช‡๊ฐœ ์žˆ๋Š”๋ฐ
aggregate๋Š” ํ•œ๋ฒˆ๋„ ์•ˆ์“ฐ๊ณ  ๊ฑฐ์˜ annotate๋งŒ ์‚ฌ์šฉํ–ˆ์—‡๋‹ค.

๋žœ๋ค ์ •๋ ฌ

์ด๋ฒคํŠธ ๊ฐ™์€ ๊ฑด๊ฐ€?
๋ญ... ์ถ”์ฒจ์„ ํ•œ๋‹ค๊ฑฐ๋‚˜ ๊ทธ๋Ÿด๋•Œ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ ๊ฑธ๊นŒ ์‹ถ์—‡๋‹ค

์‚ฌ์šฉ๋ฒ•์€ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๋‹ค
order_by๋ฅผ ์ด์šฉํ•ด์„œ ์ •๋ ฌํ•  ๊ฒƒ์„ ? ๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.

๋‘๊ฐ€์ง€ ๋ชจ๋‘ ๋žœ๋ค์ •๋ ฌ์„ ์ ์šฉํ•˜๊ณ  ๋Œ๋ ค๋ณธ ๊ฒฐ๊ณผ์ธ๋ฐ
๊ฒฐ๊ณผ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

bulk create

์ด๊ฑฐ๋Š” ๋ณด๊ณ ์„œ ์˜ค.. ์ด๋Ÿฐ๊ฒŒ ์žˆ์—‡๋„ค ์‹ถ์—‡๋‹ค

ํ˜„์žฌ ์œ ์ € ์ˆ˜

์‚ฌ์ง„์ด ๋ชจ๋ฅด์ง€ ๋ชปํ•˜๋„ค์š” ์ด์ƒํ•˜๋„ค

์ด๋Ÿฐ์‹์œผ๋กœ bulk create๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ €๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋งŒ๋“ค๊ณ  ๋‚˜์„œ ๊ถ๊ธˆํ–ˆ๋˜๊ฑด username๋งŒ ์ ์–ด์„œ create๋ฅผ ํ–ˆ๊ณ ,
๋นˆ์นธ์ด ์žˆ๋Š”๋ฐ ๋งŒ๋“ค์–ด ์งˆ๊นŒ ์‹ถ์—‡๋‹ค

๊ทธ๋ž˜์„œ admin ํŽ˜์ด์ง€๋กœ ๊ฐ€์„œ ํ™•์ธ์„ ํ•ด๋ดค๋Š”๋ฐ
์ž˜ ๋งŒ๋“ค์–ด์ง„๋‹ค

์ด๋ฆ„์ด a ์™€ b๋กœ ์‹œ์ž‘ํ•˜๋Š” ์œ ์ €๋Š” ์บก์ณ๋ฅผ ์œ„ํ•ด ์ง€์› ์–ด์š”๐Ÿ’
์•„๋งˆ ๋‹ค๋ฅธ ๊ฑด ๋‹ค ๋ฌด์‹œํ•˜๊ณ  ๋งŒ๋“œ๋Š”๋ฐ๋งŒ ์ง‘์ค‘ํ•˜๋Š” ๋…€์„์ธ๊ฐ€ ๋ณด๋‹ค

๋

๊ธ€์ด ๋„ˆ๋ฌด ๊ธธ์–ด ์งˆ๊นŒ๋ด ๋Š๊ณ  ์žˆ๋Š”๋ฐ
๋‹ค ์ •๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด 4๊ฐœ์ •๋„์˜ ๊ธ€์ด ๋‚˜์˜ฌ ๊ฒƒ ๊ฐ™๋‹ค

์ฟก๋ถ์„ ๋‹ค ๋ณด๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ์ •๋ฆฌํ•˜๋ฉด์„œ ํ•œ๋ฒˆ๋” ๋ณต์Šตํ•ด์•ผ์ง€

profile
๋”ธ๊ธฐ๊ฒ€ -๋ณธ์บ๐Ÿ’ , ๊น€์ค€ํ˜• - ํ˜„์‹ค ๋ณธ์บ ๐Ÿ’

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 12์›” 15์ผ

Hello, I enjoy reading all of your article. I like to write a little comment to support you.JOKER123

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ