环境:python 3.8,炼金术,postgres
class User(db.Model):
name = db.Column(db.Text)
birthday = db.Column(db.DateTime)
@classmethod
def upcoming_birthdays(cls):
return (cls.query
.filter("??")
.all()
)
我想创建一个sqlalchemy查询,用于过滤X天内即将到来的生日的用户。我曾考虑过使用extract
函数从生日中提取月份和日期,但在月底或年底的几天内都不起作用。我也想过试着把生日改成朱利安式的日期来做比较,但我不知道该怎么做
例如,如果今天是2020年8月30日,它将返回用户的生日
谢谢你的帮助
您可以实现以下简单查询的目标:
这不是
User
上的@classmethod,但是如果您愿意,可以将解决方案转换为@classmethod剩下要做的就是实际实现
has_birthday_next_days(...)
,下面列出了该原则,主要是该原则的文档:可以有多个
age_years_at
的实现,下面只是一种可能性,特别是postgresql
(包括所需的导入):最后,所需的查询
q = db.session.query(User).filter(has_birthday_next_days(User.birthday, 30))
生成:好处:通过使用泛型函数实现了这一点,它不仅可以用于
User.birthday
列,还可以用于任何其他类型兼容的值。此外,这些函数还可以分别用于语句的select
和where
部分。例如:您最初关于提取日和月的想法很好。
如果您从1995年9月1日生日开始,您可以将该日期和月份移到当前年份(即2020年9月1日),然后检查该日期是否在您指定的范围内(从今天到今天+X天)
至于年底的日子,你可以通过将生日和月份不仅移到今年,而且移到下一年来解决这个问题。
例如,假设今天是2020年12月30日,你的生日是1995年1月2日。然后,您将检查2020年1月2日或2021年1月2日是否在您指定的范围内
相关问题 更多 >
编程相关推荐