Минимальный/максимальный запрос SQLAlchemy без использования сеанса.запрос

#python #flask #sqlalchemy #flask-sqlalchemy

Вопрос:

У меня есть пользователь с элементами (см. Определения классов ниже). Я пытаюсь написать следующий SQL:

 SELECT min(added_date) from item where user_id = 3 and item_id in ('abcd', 'xyz')
 

Я знаю, что могу сделать что-то вроде:

 db.session.query(func.min(Item.added_date)).filter(...)
 

Но я стараюсь избегать использования db.session.запросите и просто перейдите от текущего пользователя, к которому эта функция уже имеет доступ.

Для большинства моих запросов я делаю что-то вроде:

 query = current_user.items.filter(save_type='save')
 

Я смог придумать довольно сложные запросы таким образом, но я не могу понять, как использовать функции min/max, используя этот подход.

Когда я пытаюсь сделать что-то подобное:

 current_user.items.query(func.min(Item.added_date))
 

Я получаю:

 AttributeError: 'AppenderBaseQuery' object has no attribute 'query'
 

Есть ли у меня какой-либо способ получить элемент с минимальной добавленной датой, которую Пользователь имеет только от текущего пользователя или без перехода в db.session?

Класс пользователя:

 class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    items = db.relationship('Item', backref='user', lazy='dynamic')
 

Класс Товара:

 class Item(db.Model):
    id= db.Column(db.Integer, primary_key=True, index=True, unique=True) #, mysql.INTEGER(display_width=11), autoincrement=True, nullable=False),
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    item_id= db.Column(db.String(7))
    save_type= db.Column(db.String(45)
    added_date= db.Column(db.DateTime, server_default=func.current_timestamp(), nullable=False)