多对多关系

来源:互联网 发布:mac怎么导入单反照片 编辑:程序博客网 时间:2024/04/30 20:11

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

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

一对多

  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)
原创粉丝点击