scalars의 사용 이유

2024년 3월 15일 금요일

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() 였다.

회고

이메일 처리하랴 위젯 렌더링 빵꾸난거 처리하랴 정신 없었다.