나는 이렇게 학습한다/Library 22

konlpy _ m1 mac 에서의 JAVA_HOME 경로 문제

워드 클라우드 최근 토이 프로젝트로 '워드 클라우드'를 구현하고 있습니다. 워드 클라우드란 단어의 빈도에 따라 크기를 다르게 보여주는 데이터 시각화 기법 중 하나입니다. 워드 클라우드를 구현하기 위해서는 먼저 조사, 접속사 같은 불용어들을 제거해야 합니다. 저는 불용어를 처리하기 위해 관련 라이브러리를 찾던 중 konlpy를 발견했습니다. (konlpy의 대한 자세한 내용은 아래 레퍼런스에서 확인해주세요.) konlpy 사용법을 간단하게 보자면 아래와 같습니다. >>> from konlpy.tag import Komoran >>> komoran = Komoran(userdic='/tmp/dic.txt') >>> print(komoran.morphs(u'우왕 코모란도 오픈소스가 되었어요')) ['우왕', ..

SQLAlchemy _ add() 와 add_all() 사용법과 차이점

add()와 add_all() add()와 add_all() 은 sqlalchemy session의 메서드로서 DB에 데이터를 넣을 때 사용합니다. 메서드의 이름에서 보면 알다시피 add는 단일 insert이고 add_all 은 bulk insert입니다. 오늘은 이 둘의 사용법에 대해서 알아보겠습니다. add() 여기 3개의 이름을 DB에 넣어야 한다고 해봅시다. 3개의 데이터는 각각 첫 번째 요소가 id, 두 번째 요소가 이름입니다. names = [ [1, "변덕순"], [2, "장득현"], [3, "고문용"], ] 이를 add()로 넣는다면 다음과 같은 코드를 작성할 수 있습니다. ('Name'은 model class입니다) names = [ [1, "변덕순"], [2, "장득현"], [3, "고..

Pytest _ client 에서 parmas 값 넣는 방법

테스트 코드를 작성하다보면 client를 사용해 uri요청을 보낼 때가 있습니다. 그리고 쿼리 파라미터(query string)는 패스 파라미터와 마찬가지로 uri를 텍스트로 작성해 보낼 수 있습니다. uri를 만드는 방법 세 가지를 함께 보겠습니다. 방법1. 일반 텍스트 response = client.get( "http://0.0.0.0:8000/users?limit=10&offset=0" ) 하지만 텍스트로만 작성할 경우, 하나의 케이스만 테스트 할 수 있는 정적 값이 되고 맙니다. 방법2. f-string 다음처럼 f-string을 통해 동적 값을 넣어줄 수 있습니다. limit = 10 offset = 0 response = client.get( f"http://0.0.0.0:8000/users..

SQLAlchemy 1.x 와 2.0의 Query 스타일 비교

SQLAlchemy 2.0 SQLAlchemy 2.0에서는 query를 생성할 때 2.0 스타일을 사용할 수 있습니다. 2.0 스타일은 기존의 Session.query()가 아닌 select() 등의 메소드로 생성한 쿼리를 Session.execute()로 전달하여 DB와 통신할 수 있습니다. 현재 공식문서에서는 기존 스타일의 ORM을 제거할 계획은 없다고 하며, 어떤 스타일이든 함께 사용할 수 있다고 합니다. 다만, SQLAlchemy를 비동기로 구현할 경우 AsyncSession 클래스는 Session.query()를 지원하지 않으므로 2.0 스타일을 사용해야합니다. Within the ORM, 2.0 style query execution is supported, using select() cons..

SQLAlchemy에서의 비동기 쿼리 (feat. 2.0 Style)

AsyncSession을 통한 비동기 DB 통신 SQLAlchemy 에서는 DB와 비동기로 통신하기 위해서 AsyncSession 을 사용합니다. 그런데 AsyncSession을 사용하게 되면 ORM방식도 바뀌는데요. SQLAlchemy 공식문서에서는 2.0 스타일 쿼리를 사용한다고 합니다. Synopsis - ORM Using 2.0 style querying, the [AsyncSession] class provides full ORM functionality. Within the default mode of use, special care must be taken to avoid lazy loading or other expired-attribute access involving ORM relati..

SQLAlchemy를 이용해 csv파일 DB업로드 하는 방법(feat. psql)

CSV 대량의 데이터를 디비에 업로드하기 위해 사용되는 것 중에 하나가 csv파일입니다. csv파일은 데이터들이 콤마로 구분되어진 파일을 뜻하는데 엑셀이나 스프레드 시트 등에서 쉽게 변환시켜 다운로드할 수 있습니다. 오늘은 실습으로 krx 한국거래소에서 제공하는 종목 데이터를 디비에 업로드해보겠습니다. 먼저 krx 한국거래소에서 받은 종목 데이터 파일은 다음과 같습니다. (csv로 다운받을 수 있습니다) # stock.csv 종목코드,종목명,시장구분,소속부,종가,대비,등락률,시가,고가,저가,거래량,거래대금,시가총액,상장주식수 60310,3S,KOSDAQ,중견기업부,3445,15,0.44,3450,3485,3430,61292,211021945,159405362285,46271513 95570,AJ네트웍스,..

SQLAlchemy, ‘PasswordType’으로 손쉽게 암호화하자

PasswordType 이란? sqlalchemy를 이용해 model 클래스에서 PasswordType을 적용할 수 있습니다. PasswordType을 적용한 model은 사용자가 입력한 패스워드를 자동으로 암호하하여 데이터베이스에 저장합니다. 모델 컬럼 타입을 지정한 것만으로 개발자가 따로 암호화 로직을 구현하지 않아도 되는 것입니다. 패스워드 암호화 저장 PasswordType을 사용하기 위해서는 먼저 SQLAlchemy-Utils를 설치해야합니다. pip install sqlalchemy-utils 설치가 완료되었다면 model파일에 import 해줍니다. # models.py from sqlalchemy_utils import PasswordType import 후 아래에 User model을 작..

Poetry로 프로젝트 패키지를 관리하자

Poetry는 왜 사용하는가? Poetry는 파이썬에서 종속성 관리 및 패키징을 위한 도구입니다. 즉, 프로젝트가 의존하고있는 라이브러리 패키지를 설치 및 삭제 등 효과적으로 관리할 수 있습니다. 때문에 Poetry는 pip의 requirements나 virtualenv를 대체할 수 있습니다. poetry를 pip로 설치하는 방법은 다음과 같습니다. pip install --user poetry 다른 경로의 설치 방법은 공식문서를 참고하기 바랍니다. installation Poetry로 프로젝트 생성하기 poetry를 설치했다면 이제 shell에서 poetry 명령어를 사용할 수 있습니다. poetry new project-name 위의 명령어를 통해 새로운 프로젝트를 생성할 수 있습니다. 생성된 프로젝..

pre-commit 에서 ‘flake8’ 과 ‘black’ 커스텀 문제

예제 코드 # setup.cfg [flake8] exclude = .git max-line-length = 88 [black] line-length = 88 flake8 과 black 에 ‘line-length’설정 값이 중복되는 것이 아니냐는 의견이 있었습니다. 우선 결론부터 말씀드리자면 둘다 있어야 한다고 생각합니다. 그 이유는 어느 한쪽을 생략한 경우, 생략한 쪽은 기본값을 채택하여 개발자가 원하는대로 작동하지 않기 때문입니다. 예를들어 위에 문서에서 flake8의 ‘max-line-length = 88’ 를 생략하는 경우 # 코드 수정 [flake8] exclude = .git # max-line-length = 88 black은 88자를 통과시키지만 flake8은 기본값인 79자를 기준으로 검사..

pre-commit 을 이용해 commit 전 코드 체크를 자동화하자.

pre-commit 적용하기 해당 글은 깃헙 레포지토리에서도 확인가능합니다. 깃헙 링크 pre-commit란? 커밋 메시지를 작성하기 전에 호출이 되는 명령어입니다. 커밋이 되기 전 문법 오류나 스타일, 정렬, 타입 오류 등을 체크할 때 사용합니다. 개발자의 기호에 따라 선택하고 커스텀까지 할 수 있습니다. pre-commit 적용 순서 1. git init 2. pip install pre-commit 3. pre-commit install >>> pre-commit installed at .git/hooks/pre-commit 4. pre-commit run >>> An error has occurred: InvalidConfigError: =====> .pre-commit-config.yaml is..