flask-sqlalchemy 列的最大值

10 投票
2 回答
23754 浏览
提问于 2025-04-18 02:43

假设我有一个用户模型,内容如下:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)
    numLogins = db.Column(db.Integer)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

我该如何查询登录次数最多的用户记录呢?

2 个回答

2

问题:

从一个购买记录中获取最大数量的物品,条件是这个购买记录的ID等于参数中的值。

from sqlalchemy import func

--

max_numite = db.session.query(func.max(DetCompra.numite)).filter(
DetCompra.numcom == id_compra).scalar()
21

你可以先按照 numLogins 排序,然后取第一个结果,但如果有好多人登录次数一样,这样就不行了。更好的办法是先找出最大的登录次数,然后再找出所有有这个登录次数的用户。

from sqlalchemy import func

max_logins = db.session.query(func.max(User.numLogins)).scalar()
users = db.session.query(User).filter(User.numLogins == max_logins).all()

其实你可以把这个过程简化成一个查询。

sub = db.session.query(func.max(User.numLogins).label('ml')).subquery()
users = db.session.query(User).join(sub, sub.c.ml == User.numLogins).all()

撰写回答