본문 바로가기
관리자

Programming-[Backend]

(394)
[TIL] 여러 where 조건 한번에 조회하기. multi column related id query join 상황 base_table에 a, b컬럼이 FK로 잡혀있고, 중복된 항을 count로 구한 결과가 아래와 같을 때 다시 base_table에서 a_id, b_id를 갖는 id 값을 조회할려면 어떻게 해야할까? 다시 말해 (a_id, b_id) = (9002, 3145), ...인 Row들의 각 id 값을 구하고 싶은 경우 어떻게 해야할까 해결 방법 with 구문(또는 서브쿼리)로 원래 SQL문을 감싸고, 기존 테이블과 join을 하되 on절에 원하는 조건을 기입하면 된다. with tmp as (select count(id), a_id, b_id from base_table bt where 1 = 1 and deleted is null group by a_id, b_id having count(id) > ..
[TIL] python @patch doesn't work, @patch 작동 안함. mock 현상 python에서 test를 하는데 @patch가 작동을 안했다. 아래 코드에서 make_something 함수는 테스트 대상이 아니라서 테스트 도중에 실행되지 않도록 @patch를 적용했는데 정상 작동하지 않고 make_something 함수가 그대로 실행되었다. from a.util import make_something # 중략 @patch("a.util.make_something") def test_make_other_thing(self, mock_make_something): # ... mock_make_something.assert_not_called() # Error 원인 mock은 특정 object의 참조를 가짜 객체로 바꾼다. 그런데 최상단에서 import를 해버리면 실제 그 clas..
[TIL] Django ListSerializer 활용, List Update/Create viewset을 이용하면 list, create API 끼리 묶이고, retrieve, update, destroy 끼리 detail로 묶여서 동작한다. 여기서 detail쪽은 반드시 어떤 테이블의 레코드와 일치하는 특정 인스턴스를 가리키기 위해서 아래와 같이 pk 값을 써줘야한다. 특정 학생 정보를 업데이트하기 위해 student의 pk값을 받는다. https://django.school//student/ 그래서 만약 여러 레코드(인스턴스)를 한 번에 update하고 싶다면 ListSerializer를 구성하여 처리해야한다. Serialier 구성 class StudentListSerializer(serializers.ListSerializer): def update(self, instance: Lis..
[링크] 파이썬 assert, raise 차이 https://ltlkodae.tistory.com/17 파이썬 assert, raise 차이점 파이썬에서 예외를 발생시키는 방법은 assert, raise 두가지가 있다. 그동안 크게 고민없이 사용했는데, 정리가 필요한것 같아 포스팅을 작성한다. assert 아래처럼 사용법은 굉장히 간단하다. cond = F ltlkodae.tistory.com assert는 DEBUG=True 일때만 동작. 테스트나 디버깅 성격이 강하다 실제 서비스에서는 raise 사용이 권장
웹 스크래핑, 크롤링- 2. Selenium 나도 코딩님의 파이썬 웹 스크래핑 강의 정리 https://www.youtube.com/watch?v=yQ20jZwDjTE 1. Selenium 설치 웹 자동화 테스트 툴이다. pip install selenium 크롬 웹드라이버 설치 크롬을 자유롭게 제어할 수 있는 실행파일이다. chrome://version 접속 -> chromedriver에서 알맞은 버전 다운로드 후 설치 *M1 맥북에서 chromedriver 실행파일을 열 수 없을 때 터미널로 chromedriver가 있는 디렉토리로 이동하여 아래 명령어를 입력해주면 된다. xattr -d com.apple.quarantine {크롬 드라이버 파일명(chromedriver)} 이후 다시 실행해보면 잘 실행된다. 2. 기본 사용법 naver에 접속..
[링크] 파이썬 가상환경 venv, Pycharm 개념 파이썬 가상환경은 프로젝트별로 필요한 패키지들을 다르게 설치할 수 있는 모듈이다. A 프로젝트에서는 requests라는 라이브러리가 1.0 버전이 필요할 수 있고, B 프로젝트에서는 2.0 버전이 필요할 수 있다. 가상 환경을 달리하여 해당 프로젝트의 라이브러리들에 대한 의존성을 관리해준다. 설치, 실행 가상환경 생성 프로젝트의 디렉토리에서 아래 명령어를 입력한다. Mac에서는 python 대신 python3 입력. python -m venv .venv 프로젝트에 .venv 폴더가 만들어진다. 가상환경 활성화 활성화를 위해 아래 명령어를 입력한다. . .venv/bin/activate mac에서는 아래와 같이 입력 source {가상환경 이름}/bin/activate 그럼 터미널 창의 입력란 맨 앞..
웹 스크래핑, 크롤링- 1. 기본 개념, BeautifulSoup 이미지, CSV 다운로드 나도 코딩님의 파이썬 웹 스크래핑 강의 정리 https://www.youtube.com/watch?v=yQ20jZwDjTE 1. 기초 지식 웹 스크래핑과 크롤링의 차이 웹 스크래핑: 웹페이지에서 내가 필요한 내용만 가져오는 것 웹 크롤링: 특정 웹사이트를 돌아다니며 모든 정보들을 수집하는것 XPath 특정 element의 긴 전체 경로(ex. /html/body/div/span/div...) 대신 표시하는 Unique하고 요약된 경로 크롬 브라우저의 개발자도구에서 특정 element를 우클릭/copy/Copy XPath로 XPath 값을 얻어낼 수 있다. lib. requests pip install requests raise_for_status(): 200대 응답이 아니면 에러를 출력하고 프로그램을 중..
[TIL] django, MYSQL, postgresql db collation collation은 DB에 입력되는 문자의 중복을 어떻게 볼 지 설정하는 것이다. case-insensitive는 'Fred'와 'fred'를 같은 문자로 본다. case-sensitive는 대소문자를 다르게 본다. DB provider에 따라 옵션의 이름이 각각 다르다. django 홈페이지에 나온 MYSQL에 대한 문서를 보면 default collation으로 속성값들이 있는 것을 볼 수 있다. 기본값이 정해져있다. (아래는 MYSQL) https://dev.mysql.com/doc/refman/8.0/en/charset-general.html 장고에서는 모델을 만들 때 TextField, CharField의 인자값으로 db_collation 인자를 설정해줄 수 있다. 그리고 데이터 정렬의 기준이 ..