如何使用 Postgres 在 gino 中按 date.attribute 进行过滤

How to filter by date.attribute in gino with Postgres

我尝试使用 gino

按月过滤用户
cur_month_users = await User.query.where(User.birth_date.month==12).gino.all()

但它不起作用因为:

AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'month'

我的带日期列的简单模型

class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer(), primary_key=True)
    discord_id = db.Column(db.Integer())
    user_name = db.Column(db.Unicode())
    birth_date = db.Column(db.Date())

    @property
    def month_and_day(self):
        return self.birth_date.strftime(format="%d.%m")

    def __str__(self):
        return self.user_name

我该如何解决我的问题?

我不知道 gino,但在标准 sqlalchemy(和 sql)中,您不能直接在查询中从日期获取月份。您应该使用从日期中提取月份的函数,例如 date_part:

from sqlalchemy import func
cur_month_users = await User.query.where(
    func.date_part('month', User.birth_date) == 12
).gino.all()