【问题标题】:Set relation to many-to-many relationship将关系设置为多对多关系
【发布时间】:2015-12-20 14:04:42
【问题描述】:

我有这种正常工作的多对多关系。但是,现在我需要另一个与这种多对多相关的类。

currencies = db.Table('currencies_many',
    db.Column('id', db.Integer, primary_key=True),
    db.Column('currency_id', db.Integer, db.ForeignKey('currencies.id')),
    db.Column('bank_id', db.Integer, db.ForeignKey('banks.id'))
)

class Bank(db.Model):
    __tablename__ = 'banks'
    id = db.Column(db.Integer, primary_key=True)
    bank_name = db.Column(db.String(300))
    currencies = db.relationship('Currency', secondary=currencies,
        backref=db.backref('banks', lazy='dynamic'))

class Currency(db.Model):
    __tablename__ = 'currencies'
    id = db.Column(db.Integer, primary_key=True)
    currency_name = db.Column(db.String(300))

我的意思是,例如,一个订单,我需要与多对多的关联。

class Order(db.Model):
    __tablename__ = 'orders'
    id = db.Column(db.Integer, primary_key=True)
    bank_currency_identification = db.Column(db.Integer, db.ForeignKey('currencies_many.id'))

我该怎么做?在我的示例中,bank_currency_identification 没有 db.relationship,对吗?

【问题讨论】:

  • 你确实有一个外键。你不需要关系,至少我不明白为什么。你为什么要让它成为多对多的关系?如果您确实需要它是多对多的,您可以创建另一个表,例如 currencies_many

标签: python-2.7 flask sqlalchemy many-to-many flask-sqlalchemy


【解决方案1】:

因此,如果我正确理解您的问题,您想从您的 orders 表中引用 currencies_many 表。如果是这样,那么与currencies_many 表建立外键关系是正确的。

但是,当您想从banks 表中查询orders 时,可能会遇到一些麻烦。我建议,虽然这似乎是多余的,但在 OrderBank 之间以及在 OrderCurrency 之间创建一对多的关系。

bank_id = db.Column(db.Integer, db.ForeignKey('bank.id'))
currency_id = db.Column(db.Integer, db.ForeignKey('currency.id'))

然后在Bank 类中

orders = db.relationship('Order', backref='bank')

这为您提供了一个更清晰的查询界面。

bank_orders = bank.orders

以及使您的数据模型更清晰。必须从也包含货币的中间表中查询订单会很尴尬。只是我的两分钱,但拥有一个易于理解的数据模型比建立尴尬的关系以节省一些冗余要好。

【讨论】:

    猜你喜欢
    • 2013-05-13
    • 2018-04-25
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多