#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)