如何在SQLAlchemy中仅比较日期?

2 投票
1 回答
1957 浏览
提问于 2025-04-18 02:34

我在使用 SQLAlchemy 的时候遇到一个问题:

weekly_schedule = WeeklyHour.query.filter(
    and_(
        WeeklyHour.start_time.in_(week_dates),
        WeeklyHour.end_time.in_(week_dates),
        WeeklyHour.employee == employee
        )
    ).all()

我这样获取当前周的日期:

today = datetime.datetime.today()
week_dates = [today + datetime.timedelta(days=i) for i in xrange(0 - today.weekday(), 7 - today.weekday())]

这样会返回当前周的日期列表,格式是 datetimes。就像这样:

[datetime.date(2014, 4, 7), datetime.date(2014, 4, 8), datetime.date(2014, 4, 9), datetime.date(2014, 4, 10), datetime.date(2014, 4, 11), datetime.date(2014, 4, 12), datetime.date(2014, 4, 13)]

问题是,WeeklyHour 是员工在某一天开始和结束的时间,格式也是 datetime。而 week_dates 是一个特定的时间,设置为 now()。所以我永远得不到结果,因为 datetimetime 部分不匹配。我其实只想比较 datetimedate 部分。现在我的解决办法(虽然有效但有点傻)是单独存储 datetimedates

1 个回答

3

与其查询一周中的所有天,不如把这些天作为限制条件来使用。

today = date.today()
start_of_week = today - timedelta(days=today.weekday())
start_of_following_week = start_of_week + timedelta(days=7)

weekly_schedule = WeeklyHour.query.filter(
    and_(
        WeeklyHour.start_time >= start_of_week,  # On or after Monday
        WeeklyHour.end_time < start_of_following_week, # Before next Monday
        WeeklyHour.employee == employee
        )
    ).all()

撰写回答