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

如何在Flask SQLAlchemy中创建一对多数据库关系?

如何在Flask-SQLAlchemy中创建一对多关系

在你的场景里,一个用户可以拥有多个订单,这是典型的一对多关系,实现方式如下:

步骤1:修改模型类

给Order添加关联用户的外键,同时在User中添加反向关联属性:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, unique=True, nullable=False)
    email = db.Column(db.String)
    # 反向关联用户的所有订单,backref让Order实例能通过.user访问所属用户
    orders = db.relationship('Order', backref='user', lazy=True)

class Order(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    ProductName = db.Column(db.String, nullable=False)
    price = db.Column(db.String)
    # 外键关联User的id,user.id对应User模型生成的表名(小写user)和主键字段
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

关键部分说明

  • 外键user_id:确保每个订单都必须关联一个存在的用户,nullable=False强制订单必须属于某个用户;db.ForeignKey('user.id')中的user是User模型对应的数据库表名(SQLAlchemy默认将类名转为小写作为表名)。
  • relationship属性:User中的orders属性让你可以直接通过user.orders获取该用户的所有订单;backref='user'则让Order实例可以通过order.user直接拿到对应的用户对象,无需手动通过user_id查询。

使用示例

创建用户和关联订单

# 创建用户
new_user = User(username='john_doe', email='john@example.com')
db.session.add(new_user)
db.session.commit()

# 创建属于该用户的订单
new_order = Order(ProductName='Phone', price='599', user=new_user)
db.session.add(new_order)
db.session.commit()

查询用户的所有订单

user = User.query.filter_by(username='john_doe').first()
# 获取该用户的所有订单
user_orders = user.orders
for order in user_orders:
    print(f"订单商品:{order.ProductName},价格:{order.price}")

查询订单所属的用户

order = Order.query.filter_by(ProductName='Phone').first()
# 获取订单对应的用户
order_user = order.user
print(f"订单所属用户:{order_user.username}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:07:16