IT/파이썬 2023. 5. 5.
Django manage.py my_command - 커스텀 명령어 만들기
가끔 배치 파일로 처리할 필요가 있다. python manage.py runserver 처럼 간단하게 자기 명령어를 만들어서 수행할 필요가 있다. 아주 잘 정리되어 있는 글이 있다. https://windybay.net/post/28/ Django 커스텀 manage.py 명령어 만들기 장고 프로젝트에서 manage.py 를 이용해 프로젝트 관련 명령을 실행할 때가 있다. 등등 테스트용 서버를 띄우거나 … windybay.net 나도, 빙 코파일럿을 이용해서 초안을 더 작성해 봤다. 엑셀 파일 명을 받아서 DB 에 입력하는 예제를 만들어 달라고 요청하고 정리해봤다. Django에서는 사용자가 커스텀 manage.py 명령어를 만들 수 있습니다. 이를 위해서는 Django 앱 내에 management/co..
IT/파이썬 2023. 5. 4.
Python - UnicodeDecodeError: 'cp949' 에러 해결 방법
UnicodeDecodeError: 'cp949' 에러는 파일을 읽을 때 발생할 수 있는 문제입니다. 이 문제를 해결하는 방법으로는 파일을 열 때 인코딩을 지정해주는 것이 있습니다. open('파일경로', 'rt', encoding='UTF8') 와 같이 파일을 열어주면 왠만하면 다 해결이 됩니다. *) 실제 파일 인코딩에 맞추어서 사용하면 됩니다. 다른 방법으로는 텍스트 파일을 메모장으로 열어서 다른 이름으로 저장하고 인코딩을 ANSI로 저장하는 것도 있습니다. 이 외에도 인코딩 값을 변경해서 시도하거나 파일을 직접 열어 공백이 있는지 확인하고 공백을 제거하는 방법도 있습니다.
IT/파이썬 2023. 5. 4.
Django ORM - aggregation sum 결과가 0 인 결과 배제하기
Django ORM - aggregation sum 결과가 0 인 결과 배제하기 생각해보면 아주 쉽지만 안될지 될지 몰라서 그냥 해봤는데 되네 sum, avg, count 등을 수행한 결과가 0인 경우에 결과 값에서 빼고 싶다면 그냥 exclude 를 이용하면 된다. result_groupby_product_thismonth = ( target_summaryproductcount.values("product_name") .annotate(sum_count=Sum("count")) .values("product_name", "sum_count") .exclude(sum_count=0) ) 상품명으로 Group by 해서 sum을 구했는데, Sum 값이 0면 결과값에서 빼는 코드 참고용입니다. :) http..
IT/Cloud 2023. 5. 4.
Django 서버리스 서비스 제공 - Zappa, Lambda on AWS 초안 작성중
AWS, Lambda, Django, Zappa 의 기술로 장고 프로젝트를 서버리스로 서비스를 제공할 수 있을 것 같다. Zappa는 AWS의 서버리스 컴퓨팅 서비스인 Lambda에 Django 앱을 배포하는 데 사용할 수 있는 도구입니다. 이 글에서는 Zappa를 사용하여 Django 프로젝트를 API Gateway + Lambda를 활용한 서버리스 아키텍쳐로 배포하는 방법에 대해 설명합니다. AWS, Lambda, Django, Zappa의 기술을 사용하면 장고 프로젝트를 서버리스로 서비스 제공이 가능합니다. Zappa 배포 방법은 다음과 같습니다: AWS IAM 계정 생성 /.aws/credentials 파일 작성 virtual environment 생성 pip를 이용해서 Zappa 모듈 설치 쉘에..
IT/파이썬 2023. 5. 3.
Django ORM - Group by 사용해서 Count, Sum, Avg 구하기
Django ORM으로 Group by 필드 구현하는 방법은 아래 글을 이길 수가 없어요. 완전 잘 써놓으셔서 들어가서 읽고 감탄만 하시길!! 정리해 보면, 1. 먼저 Group by 할 필드를 정해서 values에 넣고 .values("필드") 2. 함수를 불러서 쓰고 .annotate(Count(), Sum(), Avg(), ...) 3. 보여줄 필드를 다시 정리하고 .values("필드", "필드", ...) 즉, values 를 2번 불러 쓰면 된다. [Django] ORM으로 Aggregation 함수와 Group by 사용 [Django] ORM으로 Aggregation 함수와 Group by 사용 쿼리에서 aggregation함수(count(), max(), first() 등등) 와 필요한 ..
IT/파이썬 2023. 5. 1.
Django - SQL group by 를 ORM 에서 구현하기
group by는 SQL에서 데이터를 그룹화하는 구문입니다. 장고 ORM에서는 values() 메소드를 사용하여 group by의 대상이 되는 컬럼을 지정할 수 있습니다. 이후 annotate() 함수로 집계된 데이터에서 집계 함수를 실행할 수 있습니다. 예를 들어, 다음과 같은 쿼리는 장고 ORM으로 다음과 같이 표현할 수 있습니다. # SQL SELECT name, COUNT(*) FROM test GROUP BY name; # Django ORM queryset = Test.objects.values('name').annotate(count=Count('*')) 위의 예제에서 values('name')은 GROUP BY name과 동일한 역할을 합니다. 이후 annotate(count=Count('..
IT/파이썬 2023. 5. 1.
Django - ORM aggregation 함수 설명과 예
앞서 살펴본 Group by 하는 결과에 많이 사용되는 집계함수에 대해서도 잠깐 살펴보자. annotate() 구문 안에서 자주 사용되는 aggregation funcion 은 아래 처럼 몇가지를 사용할 수 있다. 장고 ORM에서 사용할 수 있는 주요 집계 함수는 다음과 같습니다. Avg: 평균을 계산합니다. Count: 개수를 계산합니다. Max: 최대값을 계산합니다. Min: 최소값을 계산합니다. Sum: 합계를 계산합니다. 예제로 알아보면 가장 쉽다. 앞서 살펴본 동일한 Test 모델과 값이 있다고 가정한다. 2023.05.01 - [IT/파이썬] - Django - SQL group by 를 ORM 에서 구현하기 Django - SQL group by 를 ORM 에서 구현하기 group by는 S..
IT/파이썬 2023. 4. 28.
Django - Rest-framework API 서버 구현 with Django Ninja
Django Ninja의 주요 장점으로는 다음과 같은 것들이 있습니다 홈페이지에 많은 정보가 있겠죠? 일단은 방문 필수!! https://django-ninja.rest-framework.com/ Django Ninja Django Ninja - Fast Django REST Framework Django Ninja is a web framework for building APIs with Django and Python 3.6+ type hints. Key features: Easy: Designed to be easy to use and intuitive. FAST execution: Very high performance thanks to Pydantic and a django-ninja.rest-..
IT/파이썬 2023. 4. 26.
Django - response 객체에 쿼리스트링 추가
response 보낼때 쿼리 스트링 붙여서 보내고 싶다면, 아래 코드를 참고하세요. response = redirect("order_view", pk=order.id) response["Location"] += "?" + request.POST.get("querystring") return response Location 이라는 필드가 있는 지 어케 아는지? 이렇게 작성을 해도 되고, from django.http import HttpResponse def my_view(request): # Get the query string from the request query_string = request.GET.get("querystring") # Create the URL with the query stri..
IT/파이썬 2023. 4. 18.
Django ORM - Q 객체, F 객체 사용
django orm에서 Q 객체를 사용하면 OR/AND 조건을 적용할 수 있습니다. Q 객체는 복잡한 조건식을 표현할 수 있도록 도와주는 객체로, 논리 연산자 (|, &, ~)를 사용할 수 있습니다1. 예를 들어, filter(Q(name=“lee”) | Q(age__gt=20))는 name이 "lee"이거나 age가 20보다 큰 레코드를 필터링합니다1. Q 객체는 filter(), exclude(), get() 등의 메소드에 인자로 전달할 수 있습니다2. Q 객체끼리는 연결하여 사용할 수 있습니다2. 예를 들어, filter(Q(name=“lee”) & Q(age__gt=20), Q(gender=“M”))는 name이 "lee"이고 age가 20보다 크며 gender가 "M"인 레코드를 필터링합니다2...
IT/파이썬 2023. 4. 18.
Django ORM - 중복 레코드 제거 방법
django orm에서 중복 레코드를 삭제하는 방법은 다음과 같습니다. 중복 레코드를 삭제하려면 먼저 중복 조건을 정의해야 합니다. 예를 들어, name과 age 필드가 모두 같은 레코드를 중복으로 간주한다면, filter(name__exact=F(‘age’))와 같이 filter() 함수에 Q 객체나 F 표현식을 사용할 수 있습니다 중복 조건에 맞는 레코드들의 id를 values_list() 함수로 추출합니다. 이때 flat=True 옵션을 주면 id 값들이 리스트 형태로 반환됩니다. 예를 들어, ids = Person.objects.filter(name__exact=F(‘age’)).values_list(‘id’, flat=True)와 같이 사용할 수 있습니다. 중복 조건에 맞는 레코드들 중에서 하나..