언어/파이썬 & 장고
-
[Python] +와 += 차이점언어/파이썬 & 장고 2019. 1. 27. 18:23
파이썬에서 어떤 값을 더할 때 +를 사용하여 새로운 변수에 결과값을 담을 수도 있고 기존에 사용하던 변수에 +=로 값을 대체할 때가 있습니다. 더 나아가 각 리스트를 합칠 때도 사용됩니다. 아래는 리스트를 합치는 예시입니다.a = [1,2] b = [3,4] c = a+b print(c) # [1, 2, 3, 4] a += b print(a) # [1, 2, 3, 4] 위 결과만 봤을 때 +와 +=의 차이가 없는 것처럼 확인됩니다. 그러나 아래 예시를 보면 똑같다 라는 가정이 틀렸다는 것을 볼 수 있습니다.a = [1,2] b = (3,4) c = a+b Traceback (most recent call last): File "", line 1, in TypeError: can only concatena..
-
[Django] queryset 결과 합치기언어/파이썬 & 장고 2019. 1. 22. 21:24
합칠 대상의 결과가 2개 이상인 경우union()union()를 사용해서 1개로 합칠 수 있습니다. union()의 2번째 인자는 중복을 허용할지에 대한 여부인데 기본값은 False로 중복을 허용하지 않습니다. (중복데이터일 경우 중복제거)result = a.union(b, all=True)결과가 쿼리셋 리스트 타입이기 때문에 ORM 형식을 그대로 사용할 수 있습니다.| 연산자| 연산자를 사용하여 손쉽게 쿼리셋 타입 리스트를 합칠 수 있습니다.result = a | b결과가 쿼리셋 리스트 타입이기 때문에 ORM 형식을 그대로 사용할 수 있습니다. + 연산자+ 연산자를 사용하기 위해선 각 쿼리셋 리스트 타입을 일반 리스트 타입으로 변경한 후 합칩니다.a = list(a) b = list(b)result =..
-
[Django] Where 절 or 문 사용하기 (Q() 사용하기)언어/파이썬 & 장고 2019. 1. 22. 20:27
Django model ORM로 Where절에 or 문을 추가하고 싶다면 Q() 를 사용해야 합니다. 사용법은 아래와 같습니다.사용하기ORfrom django.db.models import Q Base.objects.filter( Q(name='qwer') | Q(no=152124)# 동일한 결과 # SELECT * FROM base WHERE no=152124 OR name='qwer'Q() 조건 연결from django.db.models import Q q = Q() q.add(Q(no=12121), q.OR) q.add(Q(name=lee)|Q(name=kim), q.AND) q.add(Q(142411), q.OR) Base.objects.filter(q)# 동일한 결과 # SELECT * FROM..
-
[Python] Selenium 사용하기 (+PhantomJS)언어/파이썬 & 장고 2019. 1. 21. 22:51
Selenium은 웹앱을 테스트 하는데 주로 사용하는 프레임워크입니다. webdriver API를 통해 브라우저를 제어하게 할 수 있습니다. JavaScript를 이용해 비동기적으로 컨텐츠를 호출할 수 있으므로 브라우저에서 보이는 컨텐츠라면 전부 가져올 수 있다는 것을 의미합니다. 한마디로 Selenium은 실제 웹 브라우저가 동작하기 때문에 JS로 렌더링이 완료된 후의 DOM 결과물에 대한 접근이 가능합니다.설치파이썬브라우저의 업데이트 마다 새로운 드라이버를 잡기 때문에 최신버전을 유지하는 것이 좋습니다.pip3 install seleniumwebdriver아래에서는 chrome을 설치하여 사용합니다.https://sites.google.com/a/chromium.org/chromedriver/down..
-
[Django] subquery 표현하는 방법 (subquery, outerref 사용법)언어/파이썬 & 장고 2019. 1. 21. 20:59
WHERE 절의 subqueryitem = Item.objects.all() base = Base.objects.filter(no__in=Subquery(item.values('no'))) == 동일 쿼리 SELECT * FROM base WHERE no IN (SELECT no FROM item)SELECT 절의 subqueryitem = Item.objects.all() base = Base.objects.annotate(no=Subquery(item.values('no'))) == 동일 쿼리 SELECT *, (SELECT no FROM item) AS "no" FROM base 더 복잡하게먼저 위에서 그냥 예시를 들었던 모델은 아래와 같이 정의되었다고 가정합니다.class Base(models.M..
-
[Python] 문자열 포맷팅 방법들 (%, str.format, f-string)언어/파이썬 & 장고 2019. 1. 20. 04:04
파이썬에서 문자열 포맷팅 방식은 다양합니다. 아래에서 다양한 방법과 사용법을 설명하겠습니다. % operator (오래된 방식) C에서 prinf 스타일로 사용한 적이 있으면 익숙한 방식입니다. python3 이전의 방식으로 편리하지만 타입을 정확하게 알고 작성해야 한다는 단점이 있습니다. test = 'Hello %s' % 'Bob' print(test) # Hello Bob 만약 데이터 타입이 integer일 경우 아래와 같이 %s로 추가합니다. test = 'age: %i' % 111 print(test) # age: 111 만약 포맷팅하고자 하는 데이터 타입이 다를 경우, 아래와 같이 에러를 뱉게 됩니다. test = 'age: %i' % '111' # Traceback (most recent c..
-
[Django] crontab 사용하기언어/파이썬 & 장고 2019. 1. 19. 17:18
Django 에서는 crontab 기능을 지원하여 손쉽게 배치를 추가/실행/삭제를 할 수 있습니다.설치$ pip3 install django-crontabcrontab 등록스크립트 등록을 위한 함수를 생성합니다.# app/cron.py from my.app import run def scheduler(): run() pass 이후 settings.py에서 아래와 같은 형식으로 등록합니다.CRONJOBS = [ ('* * * * *', 'app.cron.scheduler') ] CRONJOBS 내에 들어가는 데이터 형식은 아래와 같습니다.(' 분 시 일 월 요일 ', '앱이름.파일명.함수명')스케쥴링에 대한 자세한 내용은 http://brownbears.tistory.com/15 에서 확인할 수 있습니다...
-
[Python] pathlib 사용하기언어/파이썬 & 장고 2019. 1. 18. 22:02
파이썬 3.4부터 내장함수로 pathlib가 추가되었습니다. pathlib가 추가되기 이전에는 os 모듈을 사용했습니다. pathlib는 파일위치 찾기, 파일 입출력과 같은 동작을 하는데 os모듈과 어떻게 다른지 아래에서 설명합니다.pathlib 설명pathlib 모듈의 기본 아이디어는 파일시스템 경로를 단순한 문자열이 아니라 객체로 다루자는 것입니다. 가령 파일의 존재성 여부를 판단하는 것은 아래와 같이 작성할 수 있습니다.import os from pathlib import Path file_path = './path/to/file' if os.path.exists(file_path): pass p = Path(file_path) if p.exists(): pass 파일시스템을 문자열이 아닌 객체로 ..
-
[Python] BeautifulSoup 사용하기언어/파이썬 & 장고 2019. 1. 18. 21:28
웹 크롤러를 만들거나 html에서 필요한 정보를 검색할 때, BeautifulSoup 라이브러리를 사용하여 편리하게 코딩할 수 있습니다.설치$ pip3 install beautifulsoup4beautifulsoup에는 기본적으로 파이썬 표준라이브러리인 html 파서를 지원하지만, lxml이라는 모듈이 더 빠르게 동작하므로 lxml 모듈도 설치해 줍니다.$ pip3 install lxml 아래는 beautifulsoup에서 사용할 수 있는 파서의 장단점을 보여주는 테이블 입니다.Parser선언방법장점단점파이썬 html.parserBeautifulSoup(markup, 'html.parser')설치할 필요 없음적당한 속도 lxml HTML parserBeautifulSoup(markup, 'lxml')매우..
-
[Python] argparse 사용법 (파이썬 인자값 추가하기)언어/파이썬 & 장고 2019. 1. 16. 21:42
파이썬 스크립트를 개발할 때, 호출 당시 인자값을 줘서 동작을 다르게 하고 싶은 경우가 있습니다. 이때, 파이썬 내장함수인 argparse 모듈을 사용하여 원하는 기능을 개발할 수 있습니다.아래 설명은 파이썬 3.7 버전 기준으로 작성했습니다.사용법간단하게 인자값을 받아 처리하는 로직은 아래와 같습니다.import argparse # 인자값을 받을 수 있는 인스턴스 생성 parser = argparse.ArgumentParser(description='사용법 테스트입니다.') # 입력받을 인자값 등록 parser.add_argument('--target', required=True, help='어느 것을 요구하냐') parser.add_argument('--env', required=False, defa..