gpt4 book ai didi

python - sqlalchemy中日期时间字段的过滤时间范围

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:25 26 4
gpt4 key购买 nike

当我在sqlalchemy中进行时间范围过滤时,我遇到了一个奇怪的问题。事件表中有一个名为 startDate 的日期时间列。我正在编写查询以返回开始时间在下午 6 点到晚上 11:59 之间的所有事件(无论哪个日期)。

我有以下代码,

from sqlalchemy import and_, Date, Time, cast
import datetime
startingTime = datetime.time(18, 0, 0)
endingTime = datetime.time(23, 59, 59)

如果我运行,

results = session.query(Event).filter(and_(cast(Event.startDate, Time)>=startingTime, cast(Event.startDate, Time)<=endingTime).all()

我没有得到结果(肯定有这个范围内的事件)。

但是如果我运行,

results = session.query(Event).filter(cast(Event.startDate, Time)>=endingTime).all()

它返回表中的所有行。

如果我按日期过滤,

results = session.query(Event).filter(and_(cast(Event.startDate, Date)>=one_date, cast(Event.startDate, Date)<=another_date).all()

结果正确!

假设 Event_A 的开始日期是 2013-11-27T19:30:00,并且

result = session.query(cast(Event.startDate, Time)).filter(Event.eventName=='Event_A').one()[0]
result >= startingTime ----> returns True
result <= endingTime ----> returns True

如有任何帮助,我们将不胜感激。

最佳答案

其实我猜是因为我使用的是sql server 2005,只有sql server 2008之后的版本才支持DATE和TIME对象。

我找到了一种使用 func.convert 来完成此任务的替代方法:

session.query(TableName).filter(func.convert(func.VARCHAR(8), TableName.datetimefield, 8) >= datetime.time(0,0)).all()

关于python - sqlalchemy中日期时间字段的过滤时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20254795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com