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

时间:2018-01-25 12:38:08

标签: python sqlalchemy flask-sqlalchemy

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

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

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")

这是对的吗?特别是,我需要customer上的widgetOrder属性,还是可以使用backref执行某些操作? (如果是这样,使用back_populates优于backref还是反之亦然?)

0 个答案:

没有答案