2013-12-19 16 views
1

我在使用sqlalchemy時遇到了一些問題。我創建像查詢:sqlalchemy:控制從查詢中選擇的列

db.session.query(Case.court_id).filter(
     Case.last_updated.between(start, end)).filter(
       (Case.last_scraped_by != "RSS") | 
       (Case.last_scraped_by.is_(None))).order_by(Case.last_updated.desc()).distinct() 

這將導致以下SQL:唯一不同的從數據庫Case.court_id的,但由於Query.order_by改變

SELECT DISTINCT `case`.court_id AS case_court_id, `case`.last_updated AS 
case_last_updated FROM `case` WHERE `case`.last_updated BETWEEN %s AND %s 
AND (`case`.last_scraped_by != %s OR `case`.last_scraped_by IS NULL) ORDER BY `case`.last_updated DESC 

這裏的問題是我想列列表我得到不正確的結果,我已經搜索了sqlalchemy的文檔,但到目前爲止沒有找到明確控制所選列的方法。所以我的問題是,明確控制所選列的最佳方式是什麼?

回答

2

這個怎麼樣(移動distinctselect部分):

db.session.query(Case.court_id.distinct()).filter(
     Case.last_updated.between(start, end)).filter(
       (Case.last_scraped_by != "RSS") | 
       (Case.last_scraped_by.is_(None))).order_by(Case.last_updated.desc()) 

但是,它可能是到一個數據庫引擎允許這樣的構造。

+0

令人驚訝的是,這使得sqlalchemy停止將'Case.last_updated'列添加到select語句。這將工作的時刻,謝謝 –

+0

很高興它的工作,但我相信一些RDMBSs可能會抱怨。 – van