sqlalchemy:控制从查询中选择的列

时间:2013-12-19 13:29:53

标签: python 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:

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

这里的问题是我只想从数据库中找到不同的Case.court_id,但是由于Query.order_by更改列列表我得到的结果不正确,我已经搜索了sqlalchemy的文档,但到目前为止找不到明确控制所选列的方法。所以我的问题是,明确控制所选列的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

这一个怎么样(将distinct移到select部分):

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())

但是,可能需要数据库引擎来允许这样的结构。