반응형
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에서 더 깔끔한 구문, 더 많은 유연성 및 비동기 프로그래밍에 대한 더 나은 지원을 제공하는 데 도움이 될 수 있습니다.
반응형
'Python' 카테고리의 다른 글
[Python] 비동기 특화 orm - Tortoise ORM (0) | 2023.11.23 |
---|---|
[Python] loguru logger 사용시 유의점 (feat. 디버깅 일기) (0) | 2023.10.04 |
[Python] 파이썬 포터블 설치 (embeddeble) (feat. windows) (0) | 2023.09.13 |
[Python] Python embedded pip error (0) | 2023.09.13 |
[python] 디버깅하기 & Error난 줄 찾기 (feat. traceback) (0) | 2023.06.15 |