ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLAlchemy ORM 특징
    Python/Today 2025. 8. 22. 09:30

    구분 설명

    ORM(Object Relational Mapping) 파이썬 객체와 데이터베이스 테이블을 매핑하여 SQL 대신 객체 지향적으로 DB 조작 가능
    데이터베이스 독립성 SQLite, PostgreSQL, MySQL, Oracle 등 다양한 DB 엔진을 지원하며 코드 변경 최소화
    세션(Session) 기반 관리 DB 연결, 트랜잭션, 객체 상태(Transient, Pending, Persistent, Detached)를 세션에서 관리
    쿼리 빌더(Query Builder) 스타일: 2.0 권장 스타일 사용 — select()/insert()/update()/delete() + session.execute(stmt) (과거 session.query()는 레거시).
    표현식 구성: 컬럼·연산자·함수를 조합해 SQL을 파이썬 객체로 구성. 예) select(User).where(User.is_active, User.age >= 20).
    조인: 관계 기반 조인 join(User.orders) 또는 조건 기반 조인 join(Order, User.id == Order.user_id), 외부조인 outerjoin() 지원.
    서브쿼리/CTE/윈도우: subquery(), cte(), func.row_number().over(partition_by=..., order_by=...) 등 고급 SQL 구성 가능.
    집계/그룹핑: func.count(), group_by(), having()로 통계/리포트성 쿼리 작성.
    정렬·페이징: order_by(), limit(), offset()로 페이지네이션 구현.
    실행/결과 처리: session.execute(stmt) → Result/ScalarResult; .scalars().all(), .one(), .first(), .fetchall() 등으로 소비.
    파라미터 바인딩/보안: 값은 자동 바인딩되어 SQL 인젝션 방지; 필요 시 bindparam()로 명시 바인딩.
    갱신 쿼리: update(User).where(...).values(...), delete(User).where(...); 필요 시 returning()으로 변경된 행 컬럼 회수.
    트랜잭션 연동: with Session(engine) as s, s.begin(): s.execute(...)로 원자성 보장.
    디버깅/로깅: create_engine(echo=True)로 SQL 출력, stmt.compile(compile_kwargs={"literal_binds": True})로 SQL 문자열 확인.
    다이얼렉트 대응: 동일한 표현식이 DB별 방언에 맞춰 컴파일되어 이식성 확보.
    지연 로딩(Lazy Loading) 필요한 시점에만 관련 객체를 로드하여 불필요한 쿼리 최소화
    관계 매핑 일대일(One-to-One), 일대다(One-to-Many), 다대다(Many-to-Many) 관계를 선언적으로 정의 가능
    트랜잭션 관리 세션 단위에서 commit/rollback 처리로 일관성 있는 데이터 관리
    스키마 정의 Declarative Base를 통해 모델 클래스로 테이블 스키마를 직관적으로 정의
    복잡한 쿼리 지원 Join, Subquery, CTE, 집계 함수 등 SQL 수준의 고급 쿼리 지원
    Migration 연동 Alembic과 같은 도구와 연계하여 스키마 버전 관리 가능
    성능 최적화 기능 Eager loading, 캐싱, 배치 쿼리(batch query) 등 다양한 최적화 기법 제공
    유연성 ORM뿐 아니라 Core(SQL Expression Language)도 함께 제공하여 ORM과 원시 SQL 혼용 가능

    'Python > Today' 카테고리의 다른 글

    Mapped  (0) 2025.08.25
    SQLAlchemy 1.3 vs 2.0 차이점  (0) 2025.08.25
    UUID VS ULID  (0) 2025.08.12
    python 정리 #3(app/crud/user_crud.py)  (0) 2025.07.08
    python 정리 #2(routers/router.py)  (0) 2025.07.08
Designed by Tistory.