본문 바로가기

반응형

Python

(62)
[Python] 예외 체이닝: 더 나은 디버깅을 위한 예외 처리 전략 Python의 예외 처리를 조금 더 구조적이고 추적 가능하게 만들기 위한 방법 중 하나가 바로 **예외 체이닝(exception chaining)**입니다. 이 글에서는 raise ... from ... 문법의 동작 원리와 장점에 대해 설명합니다.문제 상황: 예외 원인 추적 불가def parse_token(token): raise ValueError("Invalid token format")def authenticate(token): try: parse_token(token) except ValueError: raise RuntimeError("인증 실패")authenticate("abc")결과:RuntimeError: 인증 실패예외 메시지에는 "인증 실패"만 출..
[SQLAlchemy] ORM 성능 최적화: Lazy Loading vs Eager Loading (feat. 로딩 전략) SQLAlchemy ORM의 로딩 전략 옵션에 대해 알아보자.이 개념은 단순한 옵션 차이를 넘어, 쿼리 성능, 데이터 처리 효율, N+1 문제 발생 여부에 직결된다. - Lazy Loading, Eager Loading 이란?- 실무 예제- 두 방식의 차이- 언제 어떤 방식으로 써야하는가? Lazy Loading이란? (필요할 때 실행)Lazy Loading은 관계가 설정된 객체를 접근할 때마다 별도로 SELECT 쿼리를 실행하는 방식입니다.예제 모델class Author(Base): __tablename__ = 'author' id = Column(Integer, primary_key=True) books = relationship("Book", backref="author")clas..
[SQLAlchemy] 같은 테이블을 참조하는 방법 (Self-Referential Join) 같은 테이블 내에서 다른 레코드를 참조해야 하는 경우가 종종 있습니다.예를 들어, 사용자(user)와 관리자가 모두 동일한 member 테이블에 저장되는 경우, 각 사용자는 관리자 ID를 외래키로 참조하고 있을 수 있습니다.이러한 구조에서 SQLAlchemy를 통해 자기 참조(joining the same table) 를 수행할 때는 몇 가지 주의할 점이 있습니다.기본 테이블 구조예제에서는 관리자가 있는 member 테이블을 사용합니다. 각 member는 선택적으로 admin_id를 가지고 있으며, 이는 같은 테이블 내 다른 member를 참조합니다.from sqlalchemy import Column, Integer, ForeignKeyfrom sqlalchemy.orm import relationsh..
[SQLAlchemy] 윈도우 함수 orm으로 사용 https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#using-window-functions Using SELECT Statements — SQLAlchemy 2.0 Documentation docs.sqlalchemy.orgstmt = ( select( func.row_number().over(partition_by=user_table.c.name), user_table.c.name, address_table.c.email_address, ) .select_from(user_table) .join(address_table))with engine.connect() as conn: r..
[Python] Python으로 Slack 메시지 보내기 (채널 & DM) 이 문서는 Python으로 Slack 채널과 사용자에게 DM(Direct Message)을 보내는 방법을 따라할 수 있도록 정리한 가이드입니다.1. 사전 준비Slack 앱 생성 및 설정Slack API 페이지 접속"Create New App" → "From scratch" 선택앱 이름과 워크스페이스 선택 후 생성필요한 권한 추가Slack 앱의 OAuth & Permissions 탭에서 아래 Bot Token Scopes 추가:chat:writeim:writeusers:readchannels:read (퍼블릭 채널 메시지 전송 시 필요)groups:read (비공개 채널 메시지 전송 시 필요)권한 추가 후 앱을 워크스페이스에 재설치할 것!토큰 준비설치 완료 후 나오는 Bot Token(xoxb-...)을 ..
[Python] .style.yapf YAPF (feat. Python formatter) yapfYAPF is a Python formatter based on clang-format (developed by Daniel Jasper).아무리해도 기본은 마음에 안들어서 조금씩 변경해서 사용하고 싶었다. yapf 가 좋다길래 해봤다.설정한 값.해당값으로 할때 sqlalchemy로 query를 작성하면 너무 이상하게 줄바꿈이 되어서 전처리 및 주석처리를 해주고있다..style.yapf[style]based_on_style = pep8indent_width = 2column_limit = 200space_between_ending_comma_and_closing_bracket = false# enter only trailing commaSPLIT_ARGUMENTS_WHEN_COMMA_TERMINA..
[Python] logging.handlers - TimedRotatingFileHandler python에서 제공해주는 logging에선 많 handler를 제공해준다.https://docs.python.org/ko/3/library/logging.handlers.htmllogging.handlers — Logging handlersStreamHandlerFileHandlerNullHandlerWatchedFileHandlerBaseRotatingHandlerRotatingFileHandlerTimedRotatingFileHandlerSocketHandlerDatagramHandlerSysLogHandlerNTEventLogHandlerSMTPHandlerMemoryHandlerHTTPHandlerQueueHandlerQueueListener 그 중 로깅 파일 설정 시 사용하는 TimedRota..
[Python] 데크 deque 대해 아십니까? (feat. 자료구조) deque"double-ended queue"의 약자양쪽 끝에서 데이터를 추가하거나 제거할 수 있는 자료구조일반 큐(queue)와 달리, deque는 앞과 뒤 양쪽에서 삽입 및 삭제가 가능하여 보다 유연한 데이터 처리가 가능사용법 from collections import dequed = deque([1, 2, 3])d.append(4) # 오른쪽에 데이터 추가d.appendleft(0) # 왼쪽에 데이터 추가print(d) # deque([0, 1, 2, 3, 4])d.pop() # 오른쪽에서 데이터 제거d.popleft() # 왼쪽에서 데이터 제거 deque / list / queue 리스트 (list): 일반적인 데이터 저장용으로 ..

반응형