设置与多对多关系的关系

use*_*084 5 many-to-many sqlalchemy flask python-2.7 flask-sqlalchemy

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

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))
Run Code Online (Sandbox Code Playgroud)

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

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'))
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?在我的例子,我没有db.relationshipbank_currency_identification,这是正确的吗?

pec*_*rin 2

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

然而,当您想ordersbanks表中查询时,您可能会遇到一些麻烦。Order我建议,尽管看起来多余,但在和 之间Bank以及Order和 之间创建一对多关系Currency

bank_id = db.Column(db.Integer, db.ForeignKey('bank.id'))
currency_id = db.Column(db.Integer, db.ForeignKey('currency.id'))
Run Code Online (Sandbox Code Playgroud)

然后在Bank课堂上

orders = db.relationship('Order', backref='bank')
Run Code Online (Sandbox Code Playgroud)

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

bank_orders = bank.orders
Run Code Online (Sandbox Code Playgroud)

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