常见关系模板代码

以下罗列了使用关系型数据库中常见关系定义模板代码

一对多

  • 示例场景:

    • 用户与其发布的帖子(用户表与帖子表)
    • 角色与所属于该角色的用户(角色表与多用户表)
  • 示例代码

    class Role(db.Model):
        """角色表"""
        __tablename__ = ‘roles‘
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
        users = db.relationship(‘User‘, backref=‘role‘, lazy=‘dynamic‘)
    
    class User(db.Model):
        """用户表"""
        __tablename__ = ‘users‘
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True, index=True)
    

多对多

  • 示例场景

    • 讲师与其上课的班级(讲师表与班级表)
    • 用户与其收藏的新闻(用户表与新闻表)
    • 学生与其选修的课程(学生表与选修课程表)
  • 示例代码

    tb_student_course = db.Table(‘tb_student_course‘,
                                 db.Column(‘student_id‘, db.Integer, db.ForeignKey(‘students.id‘)),
                                 db.Column(‘course_id‘, db.Integer, db.ForeignKey(‘courses.id‘))
                                 )
    
    class Student(db.Model):
        __tablename__ = "students"
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
    
        courses = db.relationship(‘Course‘, secondary=tb_student_course,
                                  backref=db.backref(‘students‘, lazy=‘dynamic‘),
                                  lazy=‘dynamic‘)
    
    class Course(db.Model):
        __tablename__ = "courses"
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
    

 

自关联一对多

  • 示例场景

    • 评论与该评论的子评论(评论表)
    • 参考网易新闻
  • 示例代码

    class Comment(db.Model):
        """评论"""
        __tablename__ = "comments"
    
        id = db.Column(db.Integer, primary_key=True)
        # 评论内容
        content = db.Column(db.Text, nullable=False)
        # 父评论id
        parent_id = db.Column(db.Integer, db.ForeignKey("comments.id"))
        # 父评论(也是评论模型)
        parent = db.relationship("Comment", remote_side=[id],
                                 backref=db.backref(‘childs‘, lazy=‘dynamic‘))
    
    # 测试代码
    if __name__ == ‘__main__‘:
        db.drop_all()
        db.create_all()
    
        com1 = Comment(content=‘我是主评论1‘)
        com2 = Comment(content=‘我是主评论2‘)
        com11 = Comment(content=‘我是回复主评论1的子评论1‘)
        com11.parent = com1
        com12 = Comment(content=‘我是回复主评论1的子评论2‘)
        com12.parent = com1
    
        db.session.add_all([com1, com2, com11, com12])
        db.session.commit()
        app.run(debug=True)
    

 

自关联多对多

  • 示例场景

    • 用户关注其他用户(用户表,中间表)
  • 示例代码
    tb_user_follows = db.Table(
        "tb_user_follows",
        db.Column(‘follower_id‘, db.Integer, db.ForeignKey(‘info_user.id‘), primary_key=True),  # 粉丝id
        db.Column(‘followed_id‘, db.Integer, db.ForeignKey(‘info_user.id‘), primary_key=True)  # 被关注人的id
    )
    
    class User(db.Model):
        """用户表"""
        __tablename__ = "info_user"
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(32), unique=True, nullable=False)
    
        # 用户所有的粉丝,添加了反向引用followed,代表用户都关注了哪些人
        followers = db.relationship(‘User‘,
                                    secondary=tb_user_follows,
                                    primaryjoin=id == tb_user_follows.c.followed_id,
                                    secondaryjoin=id == tb_user_follows.c.follower_id,
                                    backref=db.backref(‘followed‘, lazy=‘dynamic‘),
                                    lazy=‘dynamic‘)
    

      

原文地址:https://www.cnblogs.com/wf-skylark/p/9306750.html

时间: 2024-08-30 09:37:45

常见关系模板代码的相关文章

模板代码 - 列表和下拉刷新

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

设计模式之UML类图的常见关系

设计模式之UML类图的常见关系 本文来自转载 烧点饭博客 本篇会讲解在UML类图中,常见几种关系: 泛化(Generalization),依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition). 1.泛化关系 泛化关系是继承或实现的关系,是is a关系,具体表现为类与类的继承,接口与接口的继承,类对接口的实现关系. 2.依赖关系 依赖关系表示为一个类使用另一个类,这种使用关系是具有偶然性的.临时性的.非常弱的,一个类的变化会影

UML中类图的四种关系及其代码实现

在uml图中 最复杂的也就是泛化,实现,依赖,关联,这四种关系了,如果弄清了这几种关系那么在理解UML图的时候就会变得轻车熟路了! 如果你对着几种关系一点都不熟悉的话可以看一下uml中的四种关系,这篇博客简单的介绍了一下这几种关系,本文将重点的介绍一下,这几种关系在代码里如何实现的! 泛化关系 我想这个也可能是最简单的关系了,泛化就是特殊到一半的过程,也就是继承的相反的过程,子类继承自父类,而父类是从子类泛化而来! 泛化(generalization)关系是一个类(称为子类.子接口)继承另外的一

KMP算法的定义及KMP练手题 HDU 1711 Number Sequence (我的模板代码)

题意:就是要你来找出b数组在a数组中最先匹配的位置,如果没有则输出-1 思路:直接KMP算法(算法具体思想这位牛写的不错http://blog.csdn.net/v_july_v/article/details/7041827) AC代码: #include<cstdio> #include<cstring> #include<stdlib.h> #include<iostream> using namespace std; #define maxn 100

Cupid&#39;s Arrow---hdu1756(判断点与多边形的位置关系 模板)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1756 题意:中文题,套模板即可: /* 射线法:判断一个点是在多边形内部,边上还是在外部,时间复杂度为O(n): 射线法可以正确用于凹多边形: 射线法是使用最广泛的算法,这是由于相比较其他算法而言,它不但可以正 确使用在凹多边形上,而且不需要考虑精度误差问题.该算法思想是从点出 发向右水平做一条射线,计算该射线与多边形的边的相交点个数,当点不在 多边形边上时,如果是奇数,那么点就一定在多边形内部,否

inputstream和outputstream读写数据模板代码

//读写数据模板代码 byte buffer[] = new byte[1024]; int len=0; while((len=in.read(buffer))>0){ out.write(buffer,0,len); }

hdu 2063 过山车 二分图的最大匹配模板。。感觉模板代码很简洁

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13092    Accepted Submission(s): 5746 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

【Head First】类图关系与代码对应(Java)

亲! 最看Head First设计模式.深感比大话设计模式更深.当初感觉策略与工厂结合特别不爽.因为还要改工厂.这次直接用接口选择.不修改.只扩展.呼呼.听说有好多人看这个有难度.其实我看也有很多迷糊的.也许是因为与大话设角度的问题吧.这次从新总结了类图之间的关系.重在代码.是什么的知识就不讲了. 关系强度从弱到强: 依赖关系(Dependency)---关联关系(Association)---聚合(Aggregation)---组合(Composition)---泛化(Generalizati

MySQL最常见错误代码及代码说明你都知道吗?

MySQL常见错误代码及代码说明一览表: 1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败<=================可以忽略 1008:数据库不存在,删除数据库失败<=================可以忽略 1009:不能删除数据库文件导致删除数据库失败 1010:不能删除数据目录导致删除数据库失败 1011:删除数据库文件失败 1012:不能读取系统表中的记录 1020:记录已被其他用户修改 1021:硬盘剩余空间不足,请加大硬盘可用空间 1