Я пытаюсь вычислить возраст экземпляра объекта с помощью атрибута "год".
class User(db.Model):
__tablename__ = 'user'
__table_args__ = {'schema': 'data'}
id = db.Column(db.Integer, primary_key=True, server_default=db.FetchedValue())
birthday = db.Column(db.Date)
@hybrid_method
def age(self):
return datetime.datetime.now().year - self.birthday.year
Пока
test = User.query.first()
test.year
возвращает 20 (правильно), следующеезапрос возвращает ошибку
test = User.query.filter(User.age==20).all()
AttributeError: Ни объект «InstrumentedAttribute», ни объект «Comparator», связанный с User.birthday, не имеют атрибута «year»
Howможно проанализировать атрибут?
РЕДАКТИРОВАТЬ на основе комментария: Решение 1:
@hybrid_property
def age(self):
return datetime.datetime.today().year - self.birthday.year
@age.expression
def age(cls):
return datetime.datetime.today().year - func.year(cls.birthday)
Решение 2 на основе SQLAlchemy - Запросы по столбцам DateTime для фильтрации по месяцам / дням /год :
@hybrid_property
def age(self):
return datetime.datetime.today().year - self.birthday.year
@age.expression
def age(cls):
return datetime.datetime.today().year - extract('year', cls.birthday)