Today I Learend
날짜
2024년 3월 15일 금요일
내용
scalars()의 역할
PostgreSQL에서 데이터를 가져올 떄 다음과 같은 형식을 사용했었다.
1
2
stmt = select(models.Product).where(models.Product.title != "가짜")
result = db.execute(stmt).scalars().all()
scalars()
를 왜 써야하는지 모르는 채, 그냥 기존 코드가 그렇길래 써왔었다. 오늘 위젯 렌더링을 구현하는 과정에서 jinja2 템플릿을 이용해 위젯 HTML에 상품들의 목록을 넣어줬지만 해당 값의 필드들을 참조할 수 없었다.
1
2
3
4
5
stmt = select(models.ListDesignerProduct)
.where(models.ListDesigerProduct.list_designer_widget_id == 1)
result = db.execute(stmt).all()
for product in result:
logging.info(product.id)
이런식으로 작성되어 있었다. 이때 저 result를 직접 로깅해보니 row라고 나오면서 내부 필드를 참조할 수 없다고 오류가 발생했다.
AttributeError: Could not locate column in row for column ‘id’
id는 분명 존재하는데 왜그럴까? 쿼리문을 실행한 결과에서 scalars()
가 없어서 데이터 객체가 아닌 결과 행을 반환받았기 때문이다. 모델 인스턴스로 가져오기 위해서 사용하는 코드가 scalrs()
였다.
회고
이메일 처리하랴 위젯 렌더링 빵꾸난거 처리하랴 정신 없었다.