상황

SqlAlchemy에서 count 한 것을 비교해서 having에 넣어 준 후 결과값을 받으려고 한다.

따로 aliased를 사용하지 않고, 그냥 바로 .label() 한 column 명을 넣고 싶은데 그냥 값을 넣어도 계속해서 에러가 뜨는 상황


해결방법

.literal_column을 사용하면, label한 값도 filter, having, order에서 사용할 수 있다.

평소에는 text()를 이용하면 잘 되지만, 부등호나 사칙연산이 필요할 경우 무조건 .literal_column()을 써줘야 한다.

 

아니면 그냥 aliased로 지정해서 바로 변수처럼 써도 된다

 


코드

  test = db.session.query(
            func.count(Association.seller_id).label('use_count'),
            CommonCode.code_value.label('limit_count')
        ).select_from(Counselor) \
        .group_by(Counselor.id) \
        .having(literal_column('membership_use_count') < literal_column('membership_limit_count'))

 


참고

https://stackoverflow.com/questions/51793704/sqlalchemy-reference-label-in-having-clause

 

SQLAlchemy reference label in Having clause

We have a query that we need to use as part of a select, and also in the having clause. The problem is that the resulting SQL expands the query in both places when I would expect to not expand it i...

stackoverflow.com

 

https://stackoverflow.com/questions/30313872/using-a-label-in-a-having-clause-in-sqlachemy

 

Using a label in a having clause in sqlachemy

I'm trying to use a label in a having clause with sqlalchemy, but I'm having problems getting it working. I'm trying something like this: qry = db.session.query( Foo.id, Foo.name...

stackoverflow.com

 

+ Recent posts