python

    SQLAlchemy. 조건식의 원하는 곳에 괄호 추가하기

    Calendar라는 테이블에 Mapping되는 모델을 다음과 같이 정의했다고 하자. from sqlalchemy import Column, INTEGER from sqlalchemy.orm import declarative_base Base = declarative_base() class Calendar(Base): __tablename__ = "calendar" year = Column(INTEGER, primary_key=True) month = Column(INTEGER, primary_key=True) day = Column(INTEGER, primary_key=True) ... 위 테이블에서 2021년 12월과 2022년 1월의 정보를 얻고자 하면 다음과 같이 SQL Query를 작성할 것이다...

    Alembic. 버전 관리 테이블이 생성될 스키마 지정하기

    Alembic이 적용된 DB에는 적용된 Revision을 기록하기 위한 `alembic_version`과 같은 테이블이 생성되게 된다. (큰 상관이 없을 수도 있지만) 서비스와 관련된 테이블과 같은 곳에 있는 것은 구분을 어렵게 하므로 다음 방법을 통해 Alembic과 관련된 테이블을 별도의 스키마에 저장할 수 있다. # In env.py, from sqlalchemy.schema import CreateSchema def run_migrations_online(): ... with connectable.connect() as connection: context.configure( connection=connection, target_metadata=target_metadata, include_schem..

    SQLAlchemy. CASE WHEN 구문 with Label

    from sqlalchemy import case session.query( ..., case( (Table.column == "조건1", "값1"), (Table.column == "조건2", "값2"), else_="예외값", ).label("새로운_칼럼명") ).filter( ... ) 만약 Equality 조건만 있다면 case.value를 사용하여 구문을 단순화할 수 있다. from sqlalchemy import case session.query( ..., case( {"조건1": "값1", "조건2": "값2"}, value=Table.column, else_="예외값", ).label("새로운_칼럼명") ).filter( ... ) 잘못된 내용, 오타, 부정확한 문장 등 어떤 피드백이든 환..

    Alembic. 동적으로 DB 접속 정보 만들기

    일반적으로 DB 접속 정보는 코드 형상 관리 도구에 포함되지 않아야하지만, Alembic에서 일반적으로 DB 접속 정보를 저장하게 되는 alembic.ini 파일을 DB 접속 정보 때문에 코드 형상 관리 도구에 포함하지 않고 개발자들이 공유하는 방식으로 이용하면 배보다 배꼽이 큰 상황이 될 수 있다. 또한, 개발 환경 별로 DB가 나누어져 있을 경우 Section을 나누어 서로 다른 DB 접속 정보를 넣어줄 수도 있어야 한다. alembic.ini를 이용해 일반적인 Configuration들은 공유하되 DB 접속 정보과 같이 코드 형상 관리 도구에 포함되지 않아야 하는 정보들을 섹션 별로 관리할 수 있는 방법들은 다음과 같다. env.py에서 alembic.ini로 인자 넘기기 1. alembic.ini..

    [FastAPI]FastAPI의 비동기 함수 동작 방식

    앞선 글 2023.03.21 - [CS/Python] - FastAPI의 동기 함수 동작 방식에서 FastAPI는 서버 Blocking을 막기 위해 동기 함수를 스레드풀로 넘겨 작업한다는 것을 확인했습니다. 그럼 비동기 함수는 어떻게 동작할까요? FastAPI를 만든 tiangolo가 한 이슈에 단 답변으로 이를 확인할 수 있습니다. Any async function can only be run on the main thread, on the main event loop. There's no other way around in Python. So, if there's an async path operation (route) function or an async dependency function, kno..

    [FastAPI]FastAPI의 동기 함수 동작 방식

    일반적인 파이썬 코드에서는 동기 함수는 순서대로 작동하고, 비동기 함수는 병렬적으로 작동합니다. 그럼 FastAPI 내의 동기 함수만을 이용한 엔드포인트에 다수의 HTTP 요청을 보내면 동기 함수를 실행하느라 서버가 요청을 받지 못하는 상황이 될 것 같다는 의문이 들었습니다. 의문을 해결하기 위해 내부적으로 FastAPI가 어떤 식으로 동작하는지 알아보겠습니다. 우선 다음과 같이 작성된 동기 함수로 작성된 엔드포인트에 `curl`을 이용하여 두 번의 HTTP 요청을 보내보겠습니다. @app.get("/sync") def sync(): print("Hello") time.sleep(2) print("Bye") # In run_sync.txt url = "http://127.0.0.1:8000/sync" u..

    [Python] Effective Python, 2nd | Ch2. 리스트와 딕셔너리 - (1) 리스트

    [Python] Effective Python, 2nd | Ch2. 리스트와 딕셔너리 - (1) 리스트

    본 문서는 파이썬 코딩의 기술(원제: Effective Python: 59 Specific Ways to Write Better Python, 브렛 슬라킨 저, 오현석 역, 길벗 2020. 10. 30)을 공부 목적으로 정리한 글입니다. 필요한 부분만 발췌한 개인 정리용 글이기 때문에 보다 상세한 내용을 알고 싶으시다면 책을 직접 읽어보시길 권해드립니다. (네이버 도서 링크) 파이썬 코딩의 기술 아마존 파이썬 프로그래밍 분야 베스트셀러, 〈Effective Python〉 전면 개정 증보판! 파이썬의 매력과 강점을 이용해 강력하고 우수한 성능의 코드를 작성하는 90가지 방법!파이썬다운 방식으로 프 book.naver.com Better Way 11. 시퀀스를 슬라이싱하는 방법을 익혀라 - __getitem..

    [Python] Effective Python, 2nd | Ch1.  파이썬답게 생각하기

    [Python] Effective Python, 2nd | Ch1. 파이썬답게 생각하기

    본 문서는 파이썬 코딩의 기술(원제: Effective Python: 59 Specific Ways to Write Better Python, 브렛 슬라킨 저, 오현석 역, 길벗 2020. 10. 30)을 공부 목적으로 정리한 글입니다. 필요한 부분만 발췌한 개인 정리용 글이기 때문에 보다 상세한 내용을 알고 싶으시다면 책을 직접 읽어보시길 권해드립니다. (네이버 도서 링크) 파이썬 코딩의 기술 아마존 파이썬 프로그래밍 분야 베스트셀러, 〈Effective Python〉 전면 개정 증보판! 파이썬의 매력과 강점을 이용해 강력하고 우수한 성능의 코드를 작성하는 90가지 방법!파이썬다운 방식으로 프 book.naver.com Better Way 1. 사용 중인 파이썬의 버전을 알아두라 Better Way 2..

    [Python] Class에서 특정 문자열로 시작하는 Method 찾기

    파이썬에서 Class 내에서 특정 문자열로 시작하는 이름을 가진 Method를 확인하는 방법을 알아보겠습니다. 사용 함수 dir() dir() 함수를 이용하면 입력된 Class 또는 Instance 내 모든 Attribute의 이름이 담긴 리스트가 반환됩니다. callable() Callable 여부에 따라 주어진 Attribute가 Class / Instance Variable와 Method 중 어느 것에 해당하는지 식별할 수 있습니다. Example 다음과 같이 정의된 Class가 존재한다고 가정하겠습니다. class Example: class_variable = 5 def __init__(self): self.instance_varibale = 3 def say_hello(self): return ..

    [Python] 주어진 문자열이 알파벳/숫자로만 구성되었는지 확인해보기

    파이썬에서 주어진 문자열이 알파벳, 숫자, 혹은 알파벳과 숫자로 구성되어있는지 확인하는 메소드는 다음과 같습니다. 문자 판별 isalpha() 메소드를 이용하여 주어진 문자열이 알파벳으로만 구성되어있는지 판별할 수 있습니다. name = "Tom" print(name.isalpha()) # True name = "Tom Holland" print(name.isalpha()) # False (공백 포함) name = "Tom1Holland2" print(name.isalpha()) # False (숫자 포함) 숫자 판별 숫자 판별의 경우 문자 판별에 비해 세분화된 메소드가 제공됩니다. isdecimal() 메소드를 활용하면 문자열이 int로 변환 가능한지 판별할 수 있습니다. isdigit() 메소드를 활..