我有以下简单的设置,其中fromDate和toDate是格式为“YYYY-MM-DD”的字符串:
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()
但那看起来不太好。有什么办法让我用正确的方法来做吗?
问题是
SomeType.date
列不是简单的date
,而是datetime
列,因此它还包含一个时间组件。此类型不匹配是问题的原因。如果是这种情况,则应遵循以下原则:
session.query(SomeType).filter(func.date(SomeType.date) >= fromDate, func.date(SomeType.date) <= toDate).all()
这里我们基本上是使用MySql的^{} 函数
cast
datetime
到date
。但是,我可能更喜欢使用
date(time)
数据类型而不是字符串。幸运的是,大多数数据库都隐式地允许解析符合ISO标准的日期字符串表示形式。用^{} 对象代替
fromDate
,toDate
的字符串怎么样?相关问题 更多 >
编程相关推荐