Flask实现思路
- 定义数据库模型,分别创建用户表和订单表模型类,通过外键关联用户ID。
- 使用SQLAlchemy(Flask常用数据库操作库)进行查询,通过关联查询计算每个用户的总订单金额,然后进行排序。
Flask核心代码片段
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
orders = db.relationship('Order', backref='user', lazy='dynamic')
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
amount = db.Column(db.Float)
# 查询每个用户的总订单金额并按总金额从高到低排序
result = db.session.query(User.name, db.func.sum(Order.amount)). \
join(Order). \
group_by(User.id). \
order_by(db.func.sum(Order.amount).desc()). \
all()
for user_name, total_amount in result:
print(f"用户 {user_name} 的总订单金额: {total_amount}")
Django实现思路
- 在Django项目的应用中定义用户表和订单表的模型类,通过外键关联用户ID。
- 使用Django的ORM进行查询,通过关联查询计算每个用户的总订单金额,然后进行排序。
Django核心代码片段
from django.db import models
from django.db.models import Sum
class User(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
class Order(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
amount = models.FloatField()
# 查询每个用户的总订单金额并按总金额从高到低排序
result = User.objects.annotate(total_amount=Sum('order__amount')).order_by('-total_amount')
for user in result:
print(f"用户 {user.name} 的总订单金额: {user.total_amount}")