언어/Python(24)
-
TIL51 | Django ORM 최적화(Lazy Loading, Caching, N+1 Problems)
Lazy Loading(지연 로딩) 필요할 때만 함수를 호출하는 개념 파이썬에서는 generator 함수 Django에서는 QuerySetAPI에서 지연로딩 특징을 가지고 있다. # DB 호출되지 않음. queryset = Publisher.objects.filter(id=20).exclude(id=2).annotate(count=Count('book')) 함수를 호출할 때 DB쪽에 실행되는 것이 아니라, queryset이 평가 될 때 DB를 호출한다. QuerySet이 평가 될 때 == 실제로 db를 호출하는 시점 Slicing, Iteration, repr() print, len(), list(), bool(), ... queryset = Publisher.objects.filter(i..
2021.11.18 -
TIL47 | Django Exceptions
자주 사용하는 예외 처리 ObjectDoesNotExist MultipleObjectsReturned KeyError JSONDecodeError ObjectDoesNotExist 🚩️ get() get() 함수를 사용할 때 반환되는 객체가 없으면, Model.DoesNotExist exception을 일으킨다. MultipleObjectsReturned 🚩️ get() get() 함수를 사용할 때 둘 이상의 객체를 반환하면, Model.MultipleObjectsReturned exception이 발생된다. KeyError Dictionary Key가 발견되지 않을 때 exception이 발생된다. JSONDecodeError POST method로 데이터를 생성해야 할 때, request.body 값..
2021.11.10 -
TIL46 | Query Performance Counter Decorator
Query performance 측정하기 Django에서 QuerySetAPI를 사용해서 Database의 데이터를 가져올 때, 정확히 어떤 query가 수행되고 어떤 식으로 몇 번 query가 실행되는지 알 수 없다. 이번에 select_related 와 prefetch_related 함수를 공부하면서 두 함수를 사용했을 때와 하지 않았을 때의 성능 차이를 확인하고 싶었는데, connection 객체를 사용해서 성능조회 데코레이터를 구현할 수 있다는 얘기를 듣고 데코레이터를 만들게 되었다. 현재 진행하고 있는 프로젝트에서 전체 상품 리스트를 조회할 때 @count_queries 데코레이터를 사용해서 쿼리 수를 출력한 결과는 다음과 같다. select_related 와 prefetch_related 함수..
2021.11.10 -
TIL45 | QuerySetAPI - select_related & prefetch_related
select_related(*fields) inner join Foreign Key로 참조하고 있는 테이블을 inner join을 통해서 한번에 가져온다. return QuerySet plain lookups VS select_related() lookup plain lookup # Hits the database. e = Entry.objects.get(id=5) # Hits the database again to get the related Blog object. b = e.blog select_related() # Hits the database. e = Entry.objects.select_related('blog').get(id=5) # Doesn't hit the data..
2021.11.10 -
TIL42 | Python에서 CSV파일 다루기(db_uploader.py)
CSV 데이터 쉼표를 기준으로 항목을 구분하여 저장하는 데이터 , 로 규칙적으로 구분되어 있기 때문에 엑셀과 같은 프로그램으로 읽을 수도 있고 생성할 수도 있다. 주로 테이블 형태로 구성된 자료나 텍스트 자료를 저장할 때 사용한다. 같은 데이터를 저장한다고 했을 때, JSON 데이터에 비해 절반이하의 용량으로 저장할 수 있다. 파이썬에서 CSV파일 다루기 파이썬에는 CSV파일을 다루기 위한 모듈을 제공한다. import csv with open('test.csv') as in_filte: data_reader = csv.reader(in_file) next(data__reader, None) for row in data_reader: print(row) with open(file_name)..
2021.11.05 -
TIL41 | CodeKata 복소수 계산, 리스트 뒤집기
CodeKata Week 3 문제 1 두 개의 input에는 복소수(complex number)가 string 으로 주어집니다. 복소수란 a+bi 의 형태로, 실수와 허수로 이루어진 수입니다. input으로 받은 두 수를 곱해서 반환해주세요. 반환하는 표현도 복소수 형태의 string 이어야 합니다. 복소수 정의에 의하면 (i^2)는 -1 이므로 (i^2) 일때는 -1로 계산해주세요. 제곱 표현이 안 되어 i의 2제곱을 (i^2)라고 표현했습니다. input "1+1i", "1+1i" "1+-1i", "1+-1i" "1+3i", "1+-2i" output "0+2i" "0+-2i" "7+1i" 나의 풀이 def complex_number_multiply(a, b): a1 = int(a.split('..
2021.11.02