[In-depth] django queryset + SQL
ยท
Django-rest-framework
3๋…„์ฐจ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ํ•ญ์ƒ ์จ์™”๋˜ orm์ด์ง€๋งŒ, ์“ฐ๋˜๊ฒƒ๋งŒ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” queyset ํ™œ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์กฐ๊ธˆ ๋ฌด์ง€ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ๊ณต์‹ document๋ฅผ ๋ณด๊ณ  ์ฐจ๊ทผ์ฐจ๊ทผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉฐ ํ•œ๋ฒˆ ๋” ๋จธ๋ฆฌ์— ์ƒˆ๊ธธ๋ ค๊ณ  ํ•œ๋‹ค. [Queryset API] filter(*args, **kwargs): ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ์ฒด๋“ค๋งŒ ๋‹ด์€ queryset์„ ๋ฐ˜ํ™˜, ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์ฃผ๋ฉด AND ์กฐ๊ฑด์œผ๋กœ ๋ฌถ์ธ๋‹ค.- lookups (method: filter(), exclude(), get())exact: ์ •ํ™•ํ•œ ์ผ์น˜ -> SQL: SELECT ... WHERE id = 14;iexact: ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†๋Š” ์ •ํ™•ํ•œ ์ผ์น˜-> SQL:SELECT ... WHERE name ILIKE 'beatles blo..
[In-depth] django orm ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๊ด€๋ จ
ยท
Django-rest-framework
django ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์˜ assertNumQueries() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐœ์ƒํ•˜๋Š” ์งˆ์˜ ํšŸ์ˆ˜๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.def test(self): User.objects.create(username="test", first_name="te", lastname="st") self.assertNumQueries(1) User.objects.filter(username="test").update(username="test2") self.assertNumQueries(2) ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋‹ค์‹œ ์ฝ๋Š” ๋ฐฉ๋ฒ•: object.efresh_from_db() ์‚ฌ์šฉobjects์˜ username์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ assertEqual()๋กœ ํ™•์ธ ๊ฐ€๋Šฅclass TestORM..
[Django] Django-Channels
ยท
Django-rest-framework
Django Channels- Django์—์„œ ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.- Channels๋Š” Django์˜ ๊ธฐ๋Šฅ์„ HTTP๋ฅผ ๋„˜์–ด์„œ WebSocket, ์ฑ„ํŒ… ํ”„๋กœํ† ์ฝœ, IoT ํ”„๋กœํ† ์ฝœ ๋“ฑ๊นŒ์ง€ ํ™•์žฅํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.- Channels๋Š” ASGI๋ผ๋Š” ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์œ„ํ•œ ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.- ์ „ํ†ต์ ์ธ HTTP ์š”์ฒญ์€ ์—ฌ์ „ํžˆ Django๊ฐ€ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, Channels๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์—ฐ๊ฒฐ ๋ฐฉ์‹๋„ ๋™๊ธฐ์‹ ๋˜๋Š” ๋น„๋™๊ธฐ์‹ ์Šคํƒ€์ผ ์ค‘ ์„ ํƒํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์„ค์น˜$ python -m pip install -U 'channels[daphne]' # Daphne ASGI application server + channels$ pip install channels # channels
JSONField ์„ค๋ช… ๋ฐ ๋™์ž‘๋ฐฉ์‹
ยท
Django-rest-framework
JSONField - JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ - ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ ํŒŒ์ด์ฌ์˜ json.loads()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์‹ฑ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— JSON ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด, JSON ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  JSON ํ˜•์‹์œผ๋กœ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™”๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ - ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ์šฉ์ด - ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์—์„œ JSONField๋กœ ๋ฐ›๊ฒŒ ๋˜๋ฉด ์ž๋™์œผ๋กœ ํŒŒ์‹ฑํ•ด์คŒ
exists ๋‘๊ฐ€์ง€ ๋ฐฉ์‹
ยท
Django-rest-framework
is_exist_data = True if revision_queryset else False is_exist_data = revision_queryset.exists()