본문 바로가기

Python

[Python] sqlalchemy select / db.query 차이 (feat. ORM)

반응형

 

sqlalchemy 로 조회를 할 경우 아래 두가지 방법으로 조회할 경우 차이점을 알아보고자 한다.

case1. Using the select() and where() Methods (SQLAlchemy 1.4)

select(TableA).where(TableA.id == 1)

 

SQLAlchemy  버전 1.4 이상에서 쿼리를 생성하는 더 새롭고 유연하며 권장되는 방법.

 

select()기능을 사용하여 선택하는 모델과 where()필터 조건을 적용하는 방법을 지정합니다.

 

이는 Python에 더 가깝고 더 깔끔하고 읽기 쉬운 구문을 제공합니다.

 

SQLAlchemy의 비동기 버전에서는 select()문을 사용하는 것도 권장됩니다.

 

Syntax:

from sqlalchemy.future import select
from sqlalchemy.orm import Session
import models

def selectTablea(id:int, db: Session = Depends(get_db)):
    stmt = select(models.TableA).where(models.TableA.id == id)
    result = db.execute(stmt).first()
    return result

 

select and where 메소드는 1개를 조회 하더라도 first, scalar, one 이 있으니 참고하자

 

case2. Using the query() and filter() Methods

db.qeury(TableA).filter(TableA.id == 1)

 

이 스타일은 보다 전통적이며 1.4 이전 버전의 SQLAlchemy에서 사용되었습니다.

 

세션 개체에 대한 메서드를 사용하여 query()쿼리를 시작하고 해당 filter()메서드를 사용하여 조건을 적용합니다.

 

여전히 널리 사용되고 지원되지만 select() 새 프로젝트에는 최신 접근 방식이 권장됩니다.

 

from sqlalchemy.orm import Session
import models

def selectTablea(id:int, db: Session = Depends(get_db)):
    stmt = db.query(models.TableA).filter(models.TableA.id == id)
    result = db.first()
    return result

 

차이점 요약

Syntax:

  • select()은 보다 현대적인 Python 구문을 제공합니다.
  • query()은 오래되었고 약간 덜 직관적입니다.

Flexibility 유연성

  • select()은 더 유연하고 확장하거나 수정하기가 더 쉽습니다.
  • query()은 간단하지만 적응력이 떨어질 수 있습니다.

Session Dependency 세션 종속성

  • select()은 쿼리 작성을 위한 세션에 의존하지 않습니다. 나중에 세션을 사용하여 쿼리를 실행합니다.
  • query()은 세션으로 시작하므로 처음부터 세션에 묶여 있습니다.

Asynchronous Support 비동기 지원

  • select()은 SQLAlchemy 1.4에 도입된 비동기 프로그래밍 모델과 더 잘 호환됩니다.
  • query()은 비동기 프로그래밍 모델을 완전히 지원하지 않을 수 있습니다.

결론적으로 두 접근 방식 모두 유효하고 널리 사용되지만 select()및 where()메서드를 채택하면 최신 버전의 SQLAlchemy에서 더 깔끔한 구문, 더 많은 유연성 및 비동기 프로그래밍에 대한 더 나은 지원을 제공하는 데 도움이 될 수 있습니다.

반응형