You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask及SQLAlchemy查询当前登录用户专属数据库信息的实现方法

实现方案

方法1:直接添加过滤条件(改动最小)

首先确认两张预约表的模型已经定义了关联User表cust_id的外键字段,参考模型定义如下:

# 模型定义示例(未添加外键请先补充)
class SpaReservation(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cust_id = db.Column(db.Integer, db.ForeignKey('user.cust_id'), nullable=False)
    spa_start = db.Column(db.DateTime, nullable=False)
    # 其余自定义字段省略

class HotelReservation(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    cust_id = db.Column(db.Integer, db.ForeignKey('user.cust_id'), nullable=False)
    check_in = db.Column(db.DateTime, nullable=False)
    # 其余自定义字段省略

修改views.py中的查询逻辑,增加外键匹配过滤即可:

@views.route('/view-reservations', methods=['GET', 'POST'])
@login_required
def view_reservations():
    # 仅筛选外键等于当前登录用户cust_id的记录
    spa_query = SpaReservation.query.filter_by(cust_id=current_user.cust_id).all()
    hotel_query = HotelReservation.query.filter_by(cust_id=current_user.cust_id).all()
    return render_template('view-reservations.html', user=current_user.username, spa_query=spa_query, hotel_query=hotel_query)

模板代码不需要做任何修改,原有循环逻辑可以直接复用。

方法2:通过模型关系查询(符合SQLAlchemy最佳实践)

可以在User模型中预先定义和预约表的一对多关系映射,后续调用更简洁:

class User(db.Model):
    cust_id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), unique=True, nullable=False)
    # 其余用户自定义字段省略
    # 定义和两张预约表的关联关系
    spa_reservations = db.relationship('SpaReservation', backref='booker', lazy=True)
    hotel_reservations = db.relationship('HotelReservation', backref='booker', lazy=True)

修改后views.py可以直接通过current_user的关系属性拿到对应数据,无需手动写过滤条件:

@views.route('/view-reservations', methods=['GET', 'POST'])
@login_required
def view_reservations():
    return render_template('view-reservations.html', user=current_user.username, spa_query=current_user.spa_reservations, hotel_query=current_user.hotel_reservations)

内容的提问来源于stack exchange,提问作者Kapernski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:04