Django QuerySet 2 - Tirrilee/TechTalk GitHub Wiki

Overview

Ask Django์—์„œ Query ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ ๋ถ€๋ถ„์„ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ƒ์„ฑํ•˜๊ธฐ(Create)

๋ฐฉ๋ฒ• 1) ๊ฐ Model Instance์˜ save ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ €์žฅ

model_instance = ModelCls(ํ•„๋“œ๋ช…1=๊ฐ’1, ํ•„๋“œ๋ช…2=๊ฐ’2) # ์ƒˆ๋กœ์šด ๋ชจ๋ธ Instance
print(model_instance.id) # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ ์ „์ด๋ฏ€๋กœ, None ๊ฐ’์„ ์ถœ๋ ฅ

####### ๊ฒฐ๊ณผ๊ฐ’ #####
None

model_instance.save() # ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ €์žฅ์„ ํ•œ๋‹ค.
print(model_instance.id) # ์ž๋™์œผ๋กœ ํ• ๋‹น๋œ id๊ฐ’์„ ์ถœ๋ ฅ

๋ฐฉ๋ฒ• 2) ๊ฐ Model Manger์˜ create ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ €์žฅ

model_instance = ModelCls.objects.create(ํ•„๋“œ๋ช…1=๊ฐ’1, ํ•„๋“œ๋ช…2=๊ฐ’2) # DB์— ์ €์žฅ
print(model_instance.id) # ์ž๋™์œผ๋กœ ํ• ๋‹น๋œ id๊ฐ’์„ ์ถœ๋ ฅ

Tip : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” INSERT SQL์ด ์ „๋‹ฌ

INSERT INTO ModelCls ('ํ•„๋“œ๋ช…1', 'ํ•„๋“œ๋ช…2') VALUES ('๊ฐ’1', '๊ฐ’2');

๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ•˜๊ธฐ(Update)

๋ฐฉ๋ฒ• 1) ๊ฐ Model Instance ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ณ , save ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ €์žฅ

  • ๊ฐ Model Instance ๋ณ„๋กœ SQL ์ˆ˜ํ–‰
  • ๋‹ค์ˆ˜ Row์— ๋Œ€ํ•ด์„œ ์ˆ˜ํ–‰ ์‹œ์—๋Š” ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
instance = ModelCls.objects.get(id=1) # id๊ฐ€ 1์ธ Instance ํ˜ธ์ถœ
instance.tags = 'Python, Django' # ํ•ด๋‹น Instance์— tags ํ•„๋“œ๋ช… ๋ณ€ํ™˜
instance.save() # Instance ์ €์žฅ

๋ฐฉ๋ฒ• 2) QuerySet์˜ update ํ•จ์ˆ˜์— ์—…๋ฐ์ดํŠธ ํ•  ์†์„ฑ๊ฐ’์„ ์ง€์ •ํ•˜์—ฌ ์ผ๊ด„ ์ˆ˜์ •

  • ํ•˜๋‚˜์˜ SQL๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ๋™์ž‘์ด ๋น ๋ฅด๋‹ค.
queryset = ModelCls.objects.all()
queryset.update(tags="Python, Django") # ์ผ๊ด„ update ์š”์ฒญ

Tip : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” UPDATE SQL์ด ์ „๋‹ฌ

UPDATE ModelCls SET tags='Python, Django';

๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ(Delete)

๋ฐฉ๋ฒ• 1) ๊ฐ Model Instance์˜ delete ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธก์˜ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • ๊ฐ Model Instance ๋ณ„๋กœ SQL ์ˆ˜ํ–‰
  • ๋‹ค์ˆ˜ Row์— ๋Œ€ํ•ด์„œ ์ˆ˜ํ–‰ ์‹œ์—๋Š” ์„ฑ๋Šฅ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
instance = ModelCls.objects.get(id=1) # id๊ฐ€ 1์ธ Instance ํ˜ธ์ถœ
instance.delete() # Instance ์‚ญ์ œ

๋ฐฉ๋ฒ• 2) QuerySet์˜ delete ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ, ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ

  • ํ•˜๋‚˜์˜ SQL๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ๋™์ž‘์ด ๋น ๋ฅด๋‹ค.
queryset = ModelCls.objects.all()
queryset.delete() # ์ผ๊ด„ delete ์š”์ฒญ

Tip : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” DELETE SQL์ด ์ „๋‹ฌ

DELETE FROM ModelCls;

์›น ์„œ๋น„์Šค, ๊ฐ ์š”์ฒญ ๋ฐ˜์‘์†๋„์—์„œ์˜ ๋ณ‘๋ชฉ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : ์•„์ฃผ ์ค‘์š”
    • DB๋กœ ์ „๋‹ฌ/์‹คํ–‰๋˜๋Š” SQL ๊ฐฏ์ˆ˜๋ฅผ ์ค„์ด๊ณ 
    • ๊ฐ SQL์˜ ์„ฑ๋Šฅ/์ฒ˜๋ฆฌ์†๋„ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”
  • ๋กœ์ง์˜ ๋ณต์žก๋„ : ์ค‘์š”
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ข…๋ฅ˜ : ๋Œ€๊ฐœ๋Š” ๋ฏธ๋ฏธ

django-debug-toolbar(๋””๋ฒ„๊น… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

  • ํ˜„์žฌ request/response์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • SQLPanel์„ ํ†ตํ•ด ๊ฐ ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ์— ๋ฐœ์ƒํ•œ SQL ๋‚ด์—ญ ํ™•์ธ ๊ฐ€๋Šฅ
  • ์›น ์„œ๋น„์Šค ์„ฑ๋Šฅ๊ณผ ์ง๊ฒฐ = ์‘๋‹ต์†๋„