본문 바로가기

728x90
반응형

Python

(96)
FastAPI & SQLAlchemy: SQLAlchemy from 1.4 to 2.0 DB 연결 from fastapi import Depends from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from typing_extensions import Annotated engine = create_engine(DATABASE_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine, expire_on_commit=True) async def get_db() -> Session: db = SessionLocal() try: yield db finally: db.close() db = Annotated[Se..
Python: datetime strftime strptime 의미 구분, # 어떤 의미? python 내장 라이브러리인 datetime을 통해서 특정 시간을 문자열로, 문자열을 특정 시간으로 변환 가능 이때, strftime과 strptime이 있는데, 이 의미를 알지 못해서 구분이 잘되지 않아 찾아보았다. strftime은 datetime 형태의 데이터를 문자열로 바꿔주고 strptime은 날짜형태로 되어 있는 문자열을 datetime 데이터로 바꿔준다. strftime: string format time (string format의 time) strptime: string parse time (string을 parse해서 time으로) 이제 헷갈리지 않고 기억이 잘 나지 않으려나
Python: python-dotenv - .env 파일 관련 library # load_dotenv # override 환경변수로 사용할 부분을 .env 파일로 따로 빼서 관리하는 경우에, 파이썬에서 해당 파일에서 변수를 불러오는 방법중의 하나로 python-dotenv 라이브러리가 있다. 설치: pip install python-dotenv from dotenv import load_dotenv import os load_dotenv()# .env에 있는 변수를 환경변수로 불러오기 os.getenv("DEBUG", False) # 환경변수에서 "DEBUG"로 이름이 되어있는 변수의 값 가져오기, 없을경우 False를 default 값으로 사용 위와 같이 하면 일반적으로 된다. 그런데, 잘 작업을 하던 중에 이상한 에러가 발생... # .env DEBUG = "False" # True or False .env 파일에 위와..
python sqlalchemy: MySQL, PostgreSQL 호환 작업 python ORM library중 하나인 sqlalchemy를 MySQL, PostgreSQL 모두 동작이 가능하도록 호환성을 고려하여 사용하기 1. Boolean: MySQL이든 PostgreSQL이든 Boolean Column 속성 사용하기 MySQL tinyint vs PostgreSQL boolean MySQL은 Boolean을 표현할 때 tinyint 타입을 권장 0을 false, 1을 true로 sqlalchemy로 Boolean type을 import하고 Column을 Boolean으로 설정하면 생성된 table의 column이 tinyint(1)로 설정되어 있는 것을 확인 가능 PostgreSQL은 boolean 타입 지원 boolean 타입 속성 컬럼에는 false, true 값이 들어..
Python: class inheritance MRO, super # method resolution order # super # 상속 순서 # 부모 클래스 # 초기화 Python에서는 class에서 상속받을 시, method가 겹칠 때, 어떤 순서로 method를 적용시킬지를 정해놓았는데 이를 MRO(Method Resolution Order)이라 한다. __mro__ CLASS.__mro__ 로 순서를 확인할 수 있다. class A: pass class B: pass class C(A,B): pass print(C.__mro__) # (, , , ) 위의 결과를 보면 C, A, B 순으로 되어 있는 것을 확인할 수 있다. * 다양한 상속 환경에서 method 실행해보기 class A: def method(self): print('from A') def parent_method(self): print('parent from A') class B: def method..
Python: [False] and [True] # falsy values in python # [False] or [True] # bool [False] and [True]의 결과는 무엇일까? False? True? 답은 [True] and 연산은 False 또는 False로 간주되는 값이 나올때까지 다음과 비교한다. False가 나오지 않는다면 마지막 값을 리턴 [False]는 boolean 타입이 아니라 리스트 타입이다. 따라서 False가 아니라 그다음 [True]를 비교한다. [True] 역시 list이다. 그 뒤에 확인할 요소가 없으므로 [True]를 반환 추가적인 예시 print([False] and [True]) print([False] and [False]) print([True] and False and True) print([True] and [] and False) # [True] # [False] # False # []..
멀티프로세싱, 멀티스레딩 이해하기 with Python CPU (central processing unit) - 명령어를 실행하는 연산 장치 - 메모리에서 데이터를 읽고 쓰는 등의 계산 작업에 집중 메인 메모리 - 프로세스가 CPU 에서 실행되기 위해 대기하는 곳 IO (input/output) - 파일을 읽고 쓰거나 - 네트워크의 어딘가와 데이터를 주고 받는 것 - 입출력 장치와 데이터를 주거나 받는 것 - 하드 디스크, 네트워크 카드, 그래픽 카드 등과 관련된 하드웨어 장치가 처리 (CPU가 하지 않음) 프로그램 - 컴퓨터가 실행할 수 있는 명령어들의 집합 프로세스 - 컴퓨터에서 실행중인 프로그램 - 각각의 프로세스는 독립된 메모리 공간을 할당 받음 - 명령어들과 데이터를 가짐 - 프로세스는 한 개 이상의 스레드를 가질 수 있다. 스레드 - 프로세스 내에..
Python: Generator # 제너레이터 # yield Generator - 이터레이터를 생성해주는 함수 - yield의 개수만큼 이터레이터에서 값을 꺼낼 수 있다. * generator를 통해 생성된 이터레이터는 하나씩 값을 꺼낼 수 있다. (yield 개수 만큼) -> 부분적으로 여러번 yield를 통해 값을 바깥으로 전달 가능하기 때문에 특정 결과를 순차적으로 얻을 때, 통으로 결과를 기다릴 필요 없이 부분적으로 확인 가능 (예시 코드는 아래) * 모든 값을 생성하는 것이 아니라 yield에 걸리는 값만 생성해서 메모리에 올리므로 메모리를 효율적으로 사용 가능 (이터레이터는 값을 미리 만들지 않고 값이 필요한 시점에 값을 만드는 방식) 예시 - return을 사용하는 일반 함수 예시 import time def return_number(): num_li..

728x90
반응형