Python语言之常见关系模板代码
小标 2018-08-09 来源 : 阅读 1001 评论 0

摘要:本文主要向大家介绍了Python语言之常见关系模板代码,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

本文主要向大家介绍了Python语言之常见关系模板代码,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助。

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

示例场景:

用户与其发布的帖子(用户表与帖子表)
角色与所属于该角色的用户(角色表与多用户表)


示例代码

?12345678910111213class 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)



多对多

示例场景

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


示例代码

?123456789101112131415161718tb_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)



 
自关联一对多

示例场景

评论与该评论的子评论(评论表)
参考网易新闻


示例代码

?12345678910111213141516171819202122232425262728class 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)



 
自关联多对多


示例场景

用户关注其他用户(用户表,中间表)



示例代码

?1234567891011121314151617181920tb_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')

  

本文由职坐标整理并发布,希望对同学们学习Python有所帮助,更多内容请关注职坐标编程语言Python频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程