python-2.7 - 将关系设置为多对多关系

标签 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.relationshipbank_currency_identification , 它是正确的?

最佳答案

所以如果我正确理解你的问题,你想引用 currencies_many来自您的表 orders table 。如果是这样,那么您与 currencies_many 的外键关系是正确的。 table 。

然而,当你想查询 orders 时,你可能会遇到一些麻烦。来自您的 banks table 。我建议,虽然看起来多余,但在 Order 之间建立一对多的关系。和 Bank以及在Order之间和 Currency .

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

然后在 Bank类(class)
orders = db.relationship('Order', backref='bank')

这为您提供了一个更清晰的查询界面。
bank_orders = bank.orders

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

关于python-2.7 - 将关系设置为多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32736446/

相关文章:

python - 使用 uwsgi 运行 Falcon APP

python - 使用 Flask 连接 ParseServer 时出现身份验证错误

python - 来自 HTML 表单的 Flask 请求返回 None 值,我该怎么办?

python - 高效地迭代 SQLAlchemy 集合

python - 使用 Cerberus 进行 SQLAlchemy 整个模型验证

python - 如何通过在构造函数中传递相关实体来使 SQLAlchemy 为外键设置值?

python - 'ascii' 编解码器无法解码字节 0xef 的位置

python - 搜索单词,并使用 fileinput 在 Python 文件中替换包含该单词的整行

python - 关于从 PyCharm 安装 SciPy

javascript - Python-Flask AJAX GET 数据不显示在 HTML 页面上