设置与多对多关系的关系

时间:2015-09-23 09:58:31

标签: python-2.7 flask sqlalchemy many-to-many 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))

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

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

我该怎么做?在我的示例中,我db.relationship没有bank_currency_identification,这是正确的吗?

1 个答案:

答案 0 :(得分:2)

因此,如果我正确理解您的问题,您需要引用currencies_many表中的orders表。如果是这样,那么与currencies_many表具有外键关系是正确的。

但是,如果您想从orders表中查询banks,可能会遇到麻烦。我建议,虽然看似多余,但要在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

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