如何使用 sqlalchemy 中的 func.strftime() 过滤将日期字段转换为日期以提取 SQLite 数据库中的当前月份

问题描述 投票:0回答:0

我想知道当月发生的订阅事件(我正在关注的事件)。这与它们发生在 5 年前还是一年前无关,只要它们发生在当前月份即可。我确信问题来自

Event.event_date
。如何将此字段转换为日期,
strftime()
然后可以使用
'%m'
从中提取月份,然后将其与当前月份进行比较。

但是,查询没有给出当月发生的事件,但我有确实发生在四月(当月)的事件。当月要自动化,我已经通过

datetime.today().strftime('%m')
成功实现了。然后我想将这个月与同月发生的所有事件进行比较。这是完整的查询代码:

monthly_events = current_user.followed_events().filter(Event.event_date < datetime.today().date()).filter(func.strftime('%m', Event.event_date == datetime.today().strftime('%m'))).order_by(Event.timestamp.desc())

通过将查询分成几个部分,我能够知道问题出在哪里。 查询部分:

current_user.followed_events().filter(Event.event_date < datetime.today().date())
给出所有已经过去的事件(昨天及以后)。这部分工作正常。

部分:

current_user.followed_events().filter(Event.event_date < datetime.today().date()).order_by(Event.timestamp.desc())
按降序排列这些过去的事件,这部分也能正常工作。

但是,有问题的部分是:

.filter(func.strftime('%m', Event.event_date == datetime.today().strftime('%m')))
目的是过滤掉当月发生的事件,而不管它们发生的年份。

请注意,我在

from sqlalchemy import func
.
的顶部导入了以下模块
from datetime import datetime
routes.py

event_date
中的
models.py
字段存储为带有
db.DateTime
default = datetime.utcnow
。我正在使用
Flask
,带有
SQLite
db,但稍后会将其更改为
Postgresql

希望信息足够,否则如果需要其他信息,请告诉我。

python datetime flask sqlalchemy func
© www.soinside.com 2019 - 2024. All rights reserved.