Свойство Python в hybrid_method - PullRequest
       17

Свойство Python в hybrid_method

0 голосов
/ 20 февраля 2019

Я пытаюсь вычислить возраст экземпляра объекта с помощью атрибута "год".

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...