2013-01-16 68 views
4

我有這個類:比較DateTime和間隔在SQLAlchemy的

class Monitor(db.Model): 
    ''' 
    Base Monitor class. 
    ''' 
    __tablename__ = 'monitor' 
    id = db.Column(db.Integer(), primary_key=True) 
    last_checked = db.Column(db.DateTime(timezone=False)) 
    poll_interval = db.Column(db.Interval(), 
           default=datetime.timedelta(seconds=300)) 

而且我有這個疑問,我試圖只返回沒有因爲檢查對象(現在 - 間隔):

monitors = db.session.query(Monitor).\ 
      filter(or_(Monitor.last_checked < (datetime.utcnow() - Monitor.poll_interval)), 
         Monitor.last_checked == None).\ 
      all() 

但是,查詢不會返回任何內容。我很難找出正確的方法來做到這一點。我在正確的軌道上還是錯過了某些東西?我使用MySQL作爲數據庫。

+0

你可以打印出一個查詢對象(即,你調用'.all()'之前有什麼)來獲得將要運行的實際SQL。我唯一的猜測是SQLA不知道使用古怪的'date - INTERVAL 3 DAYS'語法 – Eevee

+0

這是它給了我什麼。 '選擇monitor.id AS monitor_id,monitor.last_checked AS monitor_last_checked,monitor.poll_interval AS monitor_poll_interval 從顯示屏 WHERE monitor.last_checked <:poll_interval_1 - monitor.poll_interval' – Mark

回答

6

你的括號是錯誤的。我相信你想要的是:

monitors = db.session.query(Monitor).\ 
     filter(or_(Monitor.last_checked < (datetime.utcnow() - Monitor.poll_interval), 
        Monitor.last_checked == None)).\ 
     all() 
+0

這是實際的問題,錯誤的括號。 – Mark