2016-02-22 20 views
0

我敢肯定的標題是不是超級清楚,所以這裏是一些更多的解釋,我有一個模型,設立這樣的:當我使用datetime作爲數據類型時,爲什麼我不能filter_by模型中的字段?

class Event(db.Model): 

    id = db.Column(db.Integer, primary_key = True) 
    timestamp = db.Column(db.DateTime) 
    event_tag = db.Column(db.String(200), unique=True) 
    user_id = db.Column(db.Integer, db.ForeignKey('user.id')) 
    event_title = db.Column(db.String(250)) 
    event_short = db.Column(db.String(500)) 
    event_long = db.Column(db.Text) 
    event_date = db.Column(db.DateTime) 

    def __repr__(self): 
     return '<Event %r>' % (self.event_tag) 

我可以創建數據庫中的記錄就好使用:

event1_futureDate = datetime.utcnow() + timedelta(days=5) 
event1 = models.Event(timestamp=datetime.utcnow(), event_title='event1', event_tag='friendly_url_tag', user_id=event_user.id, event_date=event1_futureDate, event_short='short event descr.', event_long='Long event description!') 
db.session.add(event1) 
db.session.commit() 

和拉像這樣的信息:

>>> event1 = models.Event.query.get(1) 
>>> event1.event_date 
datetime.datetime(2016, 2, 27, 4, 42, 44, 372682) 

或這樣的:

>>> event2 = models.Event.query.filter_by(event_tag='friendly_url_tag').first() 
>>> event2.event_date 
datetime.datetime(2016, 2, 27, 4, 42, 44, 372682) 

而是試圖查詢與filter_by用db.DateTime場導致這樣的錯誤:

>>> events = models.Event.query.filter_by(event_date>datetime.utcnow()).all() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'event_date' is not defined 

我不清楚,爲什麼我不能用在模型中提出的EVENT_DATE在filter_by部分的查詢。

我知道該字段存在,下面的代碼暫時用作旁路。我不喜歡它,寧願在原始選擇中執行此操作,而不是整個表格。

@web.route('/calendar') 
def calendar(): 
    events = Event.query.all() 
    showEvents = [] 
    for event in events: 
     if event.event_date >= datetime.utcnow(): 
      showEvents.insert(0,event) 

    return render_template('partial-calendar.html', events=showEvents) 

感謝, 邁克爾

回答

1

filter_by採取關鍵字參數,沒有表情。您不能在其中使用>,只能使用=

你想用filter代替,如:filter(models.Event.event_date > datetime.utcnow())

+0

這是一直是我所有的煩惱的原因...謝謝! –

相關問題