这是写SQLAlchemy多人关系的正确方法吗?

2024-04-20 02:17:34 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我正在创建一个客户可以订购小部件的系统。每个客户可能会订购许多小部件,每个小部件可能会被许多客户订购,因此我需要一个链接表来存储订单(其中还可以存储一些附加信息,如数量)。你知道吗

到目前为止,我提出了以下实现方案:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Order(db.Model):
    customer_id = db.Column(db.ForeignKey("customer.id"), primary_key=True)
    widget_id = db.Column(db.ForeignKey("widget.id"), primary_key=True)

    customer = db.relationship("Customer", back_populates="orders")
    widget = db.relationship("Widget", back_populates="orders")

    quantity = db.Column(db.Integer)

class Customer(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)

    orders = db.relationship("Order", back_populates="customer",
        cascade="all, delete-orphan", lazy="dynamic")

class Widget(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.Text)

    orders = db.relationship("Order", back_populates="widget",
        cascade="all, delete-orphan", lazy="dynamic")

是这样吗?特别是,我需要customerwidget属性吗,或者我可以用backref做些什么?(如果是这样,使用back_populatesbackref有什么好处吗?反之亦然?)你知道吗


Tags: keyidtruedb客户部件backcolumn