多对多关系

实体模型中相关的模型之间为了方便查询需要做到你中有我 我中有你

多对多与一对多实体模型的区别

一对多
  1. 表设计上是在多方应用少方的主键作为外键约束
  2. 模型上需要在多方加入一个少方模型对象的属性,在少方加入一个多方对象的列表
  3. 语法:少方对象=db.relationship(‘少方模型名’,backref=db.backref(‘xxlist’))

多对多

  1. 表设计上需要建立一个关系表 甲乙双方的主键进行关系映射
  2. 模型上需要在甲方添加一个乙方模型对象的列表,在乙方添加一个甲方模型对象的列表
  3. 语法:乙方对象列表名 =db.relationship(‘乙方模型名’,secondary=’数据库关系表名’,backref=db.backref(‘甲方模型对象列表名’))
  4. 关系表的模型用db.Table()来创建,而不是定义一个关联表实体类
-------关系表模型----------
article_tag = db.Table('article_tag',
                       db.Column('article_id', db.Integer, db.ForeignKey('article.id'), primary_key=True),
                       db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True)
                       )

--多对多模型--
class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    ---关联关系---
    tags = db.relationship('Tag',secondary='article_tag',backref=db.backref('articles'))


class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    tagname = db.Column(db.String(100), nullable=False)

------查询案例---------
  article1  = Article.query.filter(Article.title=='aaa').first()
    for x in article1.tags:
        print(x.tagname)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值