在sqlite上,你需要轉換你的文本。以下可能會有所幫助:
qry = session.query(SomeTable)
dt_column =(func.substr(SomeTable.date, 7) + "-" +
func.substr(SomeTable.date, 4, 2) + "-" +
func.substr(SomeTable.date, 1, 2) + " " + SomeTable.time)
dt_column = func.datetime(dt_column)
qry = qry.filter(dt_column <= datetime(2013, 1, 1, 23, 59, 59))
更妙的是使用sqlalchemy
Hybrid Attributes,這樣就可以同時獲得蟒級別和數據庫的日期時間字段:
class SomeTable(Base):
__tablename__ = 'some_table'
id = Column(Integer, primary_key=True)
name = Column(String)
date = Column(String)
time = Column(String)
@hybrid_property
def datetime(self):
# @todo: add python parsing of date and time to produce the result
str_value = self.date + self.time
return datetime.strptime(str_value, "%d/%m/%Y%H:%M:%S")
@datetime.expression
def datetime(cls):
# @note: query specific value
dt_column =(func.substr(cls.date, 7) + "-" +
func.substr(cls.date, 4, 2) + "-" +
func.substr(cls.date, 1, 2) + " " + cls.time)
dt_column = func.datetime(dt_column)
return dt_column
...
qry = session.query(SomeTable)
qry = qry.filter(SomeTable.datetime <= datetime(2013, 1, 1, 23, 59, 59))
注意,在客戶端你將有datetime
實例,而在sqlite級別上,它仍然是一個字符串。
來源
2014-01-16 10:30:44
van
要做到這一點是一個真正的查詢,你的數據庫軟件將是相關的,因爲它需要在SQL中的字符串解析功能。 – jordanm
@jordanm :-(這是sqlite3,但直到需要mysql纔是臨時措施。 – Oddthinking