파이썬(Python)/TradeNPU

회원사 Item Introduction page 만들기 시리즈 V - ORM (3)

JJ Goh[Certified customs broker] 2024. 11. 18. 21:38

 

지난 포스팅까지 ORM Read를 훑었고, 이번에는 나머지 Create, Update, Delete를 빨리 훑어보고자 합니다.

 

 

Django ORM Create, Update, Delete

 

Django ORM의 Create이나 Update에 대해서는 공식문서를 통해서 방법을 상세히 안내하고 있습니다. 

필자는 코딩과정에서 Create, Update와 Delete은 Class화하여 사용이 가능하겠다는 접근으로 코딩을 진행해 보았는데요.

필자가 만든 서비스에서는 Model마다 field type, 갯수가 다 다르고, 각 View마다 고려할 요소가 많았습니다.

 

 Class화 하기엔 너무 많은 고려요소를 반영해야 한다는 것을 느낀 순간, Class화 없이 View function마다 그냥 코드를 그대로 짜는 것으로 하고 코딩을 쭉 진행해 오고 있습니다. 

 나중에 리팩토링을 또 하게 되면, 이 부분도 Class로 묶어낼 수 있는 만큼은 묶어내는 걸로 계획하고 있는데요. 

 일단, 해봐야 알겠지만 현재로서는 일단 기능 작성에만 몰두 중입니다.

 

 

 Django Create은 아래와 같은 방식으로 가능합니다.

new_keyword = Tickets(    
    srch_word=srch_key,
    srch_datetime=timezone.localtime(),
)
new_keyword.save()

 

 

 모델의 구성 key에 넣어야 할 값을 변수들에 담거나 아니면, 직접 기입하는 방식으로 변수에 담아 객체를 생성하고 save()메소드를 수행하면 끝입니다.

 

 

 Update는 아래와 같은 방식으로 수행됩니다.

tgt_news = News.objects.get(pk=pk)

tgt_news.news_title = news_title
tgt_news.news_body = news_body

tgt_news.save()

 

 보통 수정을 할 때엔, 특정 건을 지목하게 됩니다. 따라서, 잘 사용하지 않게 되는 get()메소드를 사용하게 됩니다.

 

 지난 번 Read를 다룰 때 언급하였듯이, get()메소드를 쓰면 조회건이 0건이거나, 2건 이상이 되면 Django에서는 바로 에러를 뱉어 냅니다. 정말 명백하게 1건이 존재할 때 get()메소드를 써야 하는데요.

 

 수정에 대해서는 특정 1건의 데이터라인을 지목해 데이터를 수정한다는 특징이 있기 때문에 get()을 쓰게 되는 것이며, 각 key값에 수정할 값을 배분하는 것도 get()메소드로 읽어들인 객체를 특정한 변수에 대입한 후 해당 변수에 key값을 특정해서 넣을 값을 대입해 주기만 하면 됩니다.

 그리고, 마지막으로 save()를 통해 최종 변경을 반영하게 됩니다.

 

 

 그렇다면, 여러건을 동시에 변경하고 싶다면...

 

 위 방식을 for문을 돌리는 방법이 있는데요. 

 레퍼런스도 그렇고, 실제 필자가 ORM을 초기에 경험할 때 당시에 겪었었던 기억으로도 해당 방식을 실행했을 때, 변경할 건이 굉장히 많으면, 수행 중 딜레이, 심지어는 에러가 난 경우가 있었다는 점을 유의를 하여야 하겠습니다. 

 이건 save()를 for문이 끝날 때마다 쓰기 때문이라 하겠습니다.

 

 update()를 쓰는 방식이 있는데, 왜 for문을 얘기하느냐 물으신다면, 똑같은 key에 해당하는 모든 경우에 다 같은 값을 반영하는 동작을 하는게 아니었기 때문이라고 말씀 드리겠습니다. 

 만약, 모두 다른 값을 대량 update헤야 한다면 bulk_update()를 사용할 수 있습니다. 

 

 

 

 

 

 

 Delete은 아래와 같은 방식으로 수행됩니다.

 

tgt_news = News.objects.get(pk=pk)
tgt_news.delete()

 

 Update와 마찬가지로 get()메소드로 특정 조건의 데이터라인을 지목해 객체를 생성해 변수에 담아서 delete() 메소드를 사용하게 됩니다. delete()메소드를 쓰면 바로 해당 데이터라인은 삭제됩니다.

 

 이로써, ORM CRUD에 대한 기본 내용은 다 훑은 것 같습니다.

 

 DB를 만질 준비가 되었으니, 이제 Front로 넘어가서 Template 언어와 함께 화면을 구성하는 것에 관련된 얘기를 이어 나가면 될 것 같습니다.

 

 다음 포스팅에서 글 이어나가겠습니다.

 

 

 

 

NPU(엔피유) 관세사무소

대표관세사 고장주

Tel) 031-986-7190

E-mail) sales@npucus.com

[NPU관세사무소 홈페이지] https://www.npucus.com/

[NPU관세사무소 프로모션 페이지] https://www.tradenpu.com/npu_cus/

[무역비지니스 인텔리전스 서비스 | TradeNPU] https://www.tradenpu.com

 

TradeNPU | 무역 사무자동화 디지털 플랫폼

Trade Business Intelligence Service | TradeNPU 무역 데이터활용 자동화 효율화 사무관리 디지털 플랫폼

www.tradenpu.com

 

[파이썬 실용 예제. 무역과 공공데이터] https://pdatinmylife.tistory.com

Certified Customs Broker JangJu Goh

Executive Customs Broker @ NPU Customs Consulting

CEO @ JG TradePlus

sales@npucus.com

Trade Compliance / Customs clearance management at foreign company

Working experience of Air export freight forwarding

Data Visualization / Independent development of business automation application – copyright of JGPO_Manager, JG Data Center, AutoCC and etc.

B2B consignment & direct export/import, B2C Overseas Buying Office consulting

Alibaba.com B2B trade / taobao B2C trade / Amazon.com global selling etc. Online trade regulation consulting.

Import license / Quarantine

English communication available

[TradeNPU for partnership proposal - JGTP] https://www.tradenpu.com/jgtp/

반응형