2014-01-23 187 views
2

我有以下簡單的設置,在那裏沒有fromdate和todate是在格式爲「YYYY-MM-DD」的字符串:如何比較sqlalchemy中的日期?

class SomeType(Base): 
    date = Column(DateTime) 

def findAll(fromDate, toDate): 
    return session.query(SomeType).filter(SomeType.date >= fromDate, SomeType.date <= toDate).all() 

的問題是,它沒有找到我想要找除非我什麼修改輸入日期是這樣的:

def findAll(fromDate, toDate): 
    fromDate = fromDate + " 00:00" 
    toDate = toDate + " 24:00" 
    return session.query(SomeType).filter(SomeType.date >= fromDate, SomeType.date <= toDate).all() 

但這看起來不太好。關於如何以正確的方式做到這一點的任何想法?

+0

第一個樣品有什麼問題? 「你找不到我想找的東西」是什麼意思?具體而言,它沒有發現什麼? –

回答

7

如何使用datetime.datetime對象代替字符串fromDate,toDate

from datetime import datetime, timedelta 

def findAll(fromDate, toDate): 
    fromDate = datetime.strptime(fromDate, '%Y-%m-%d') 
    toDate = datetime.strptime(toDate, '%Y-%m-%d') + timedelta(days=1) 
    return session.query(SomeType).filter(
     SomeType.date >= fromDate, 
     SomeType.date < toDate).all() 
0

的問題是,你的SomeType.date列不是簡單date,但datetime列,所以它也包含了時間分量。

此類型不匹配是您的問題的原因。如果是這種情況,那麼下面應該工作:

session.query(SomeType).filter(func.date(SomeType.date) >= fromDate, func.date(SomeType.date) <= toDate).all()

我們基本上castdatetimedate其中使用MySQL的DATE(...)功能。

但是,我可能更喜歡使用date(time)數據類型而不是字符串。大多數數據庫隱含地允許解析符合ISO標準的DATE字符串表示,這真是太幸運了。