2011-08-27 5 views
0

나는 하루 종일 저를 묶는 몇 가지 문제를 만났습니다. 나는 플라스크/플라스크-SQLAlchemy의/PostgreSQL을 사용하고, 나는이 작업을 수행 할 수 :flask-sqlalchemy의 쿼리 개체에서 열을 선택하거나 필드를 말하게하는 방법은 무엇입니까?

published_sites = msg_published.query \ 
      .filter(and_(*filter_clause)) \ 
      .group_by(msg_published.site_id) \ 
      .order_by(order_clause) \ 
      .paginate(page_no, per_page, error_out = False) 

하지만 MySQL은, 그것은 OK이고, PostgreSQL을에 잘못과에 어느 사이트 ID 외에 다른 필드를 요청 by 절 또는 집계 함수에서 그룹, 나는 PostgreSQL을 MySQL을보다 SQL에 대한 엄격한 것을 알고, 그래서 나는 msg_published의 쿼리 객체의 사이트 ID를 선택해야하지만, 순수 SQLAlchemy의에서 I는 다음과 같이 수행 할 수 있습니다

published_sites = session.query(msg_published.site_id) \ 
      .filter(and_(*filter_clause)) \ 
      .group_by(msg_published.site_id) \ 
      .order_by(order_clause) \ 
      .paginate(page_no, per_page, error_out = False) 

플라스크 sqlalchemy에서 어떻게 작동시킬 수 있습니까?

답변

1

당신은 거기에있는 대부분의 방법입니다. PostgreSQL에서 MySQL이 허용하는 것은 subselect가 필요합니다.

published_sites_ids = session.query(msg_published.site_id) \ 
      .filter(and_(*filter_clause)) \ 
      .group_by(msg_published.site_id) \ 
      .order_by(order_clause) \ 
      .paginate(page_no, per_page, error_out = False) 

published_sites = session.query(msg_published) \ 
         .filter(msg_published.id.in_(published_sites_ids)) 
관련 문제