Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >常见关系模板代码

常见关系模板代码

作者头像
汪凡
发布于 2019-03-01 02:18:46
发布于 2019-03-01 02:18:46
5370
举报
文章被收录于专栏:python成长之路python成长之路

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

一对多

  • 示例场景:
    • 用户与其发布的帖子(用户表与帖子表)
    • 角色与所属于该角色的用户(角色表与多用户表)
  • 示例代码 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')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flask(数据库操作 十一)
支持的字段操作:ColumnOperators:/usr/local/lib/python3.7/site-packages/sqlalchemy/sql/operators.py.ColumnOperators
zx钟
2020/07/30
4170
Flask(数据库操作 十一)
flask + pymysql操作Mysql数据库
安装flask-sqlalchemy、pymysql模块 pip install flask-sqlalchemy pymysql  ### Flask-SQLAlchemy的介绍 1. ORM:Object Relationship Mapping(模型关系映射)。 2. flask-sqlalchemy是一套ORM框架。 3. ORM的好处:可以让我们操作数据库跟操作对象是一样的,非常方便。因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象。 4. 安装`flask-sqlalchemy`:`su
用户1173509
2018/01/17
3.1K0
flask + pymysql操作Mysql数据库
利用Flask搭建微电影视频网站(二):项目优化与模型设计
努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!
啃饼思录
2018/09/29
2.3K0
Flask架站基础篇(八)--SQLAlchemy(2)
零、数据库增删改查 1.增 # 增加数据 article1 = Article(title='aaa', content='bbb') # 以下这种方式也可以 # article1.content = 'ccc' # article1.title = 'ddd' # 保存数据 db.session.add(article1) # 提交事务 db.session.commit() 2.删 # 删除 article1 = Article.query.filter(article1.title == 'eee')
喵叔
2020/09/08
4810
Flask中对MySQL的基本操作
在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提交会话。 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。 最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。 在视图函数中定义模型类 from flask import Flask from flask_sqlalchemy import S
汪凡
2019/03/01
1.4K0
Flask中对MySQL的基本操作
关于flask入门教程-图书借阅系统-数据库设计和ORM映射
数据库设计是指根据用户的需求,在某一具体的数据库管理系统上,设计数据库的结构和建立数据库的过程。
python与大数据分析
2022/03/11
5760
关于flask入门教程-图书借阅系统-数据库设计和ORM映射
图书馆数据库系统
library.py """ 分析图书馆案例 - 1.数据库配置 - 作者模型(一方) - 书籍模型(多方) - 2.添加测试数据 - 3.添加作者,书籍 - 4.删除作者,删除书籍 """ from flask import Flask, render_template, request, redirect,flash from flask_sqlalchemy import SQLAlchemy from flask_wtf.csrf import CSRFProtect app = Fl
小闫同学啊
2019/07/18
2.5K0
[742]Flask数据库过滤器与查询集
flask-sqlalchemy所作的操作只是把模型类转换为sql语句,然后通过数据库驱动访问mysql,在获取到结果后再把数据转换为模型对象
周小董
2020/01/13
7.1K0
Flask入门到放弃(四)—— 数据库
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10979970.html
py3study
2020/01/15
3.5K0
Flask 表结构 用户权限划分
最近学习了下用户权限划分的数据库结构,并且结合到了 Flask 和 SQLAlchemy 中
Python之道
2020/06/02
1.3K0
Flask 表结构 用户权限划分
基于Flask开发企业级REST API应用(四)
几乎现在所有应用都会用到缓存技术,而在服务器端redis是很多实现缓存的首选技术。
阳仔
2019/08/21
5920
Flask 学习-78.Flask-SQLAlchemy 一对多关系
前言 一个人有多个收件地址,这就是一对多关系 一对多(one-to-many)关系 关系使用 relationship() 函数表示。然而外键必须用类 sqlalchemy.schema.ForeignKey 来单独声明: class Person(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) addresses = db.relationship('Ad
上海-悠悠
2022/09/28
1.1K0
Flask 学习-78.Flask-SQLAlchemy 一对多关系
flask系列四之SQLAlchemy(二)表关系
目标:建立两个表“用户表(user)”和“问题表( question)”,其中问题表中的作者id是是用户表的id即外键的关系。(一个用户可以有多个问题)
wfaceboss
2019/04/08
5130
盘点Flask与数据库的交互插件--Flask-Sqlalchemy
在我们做web开发的时候,经常需要用到与数据库交互,因为我们的数据通常都是保存在数据库中的,如果有人需要访问,就必须与数据库访问,所以今天我们介绍一个Flask中与数据库交互的插件---Flask-Sqlalchemy。
Python进阶者
2021/08/20
2.5K0
模型继承与对应关系
在一对多关系基础上的父表中使用backref函数,并添加uselist参数来表示一对一关系
星哥玩云
2022/09/14
1.4K0
3.Flask-SQLAlchemy
 (1)安装 pip install flask_sqlalchemy (2)数据库连接 from flask import Flask # 1.导入 from flask_sqlalchemy im
zhang_derek
2019/02/13
5740
flask-sqlalchemy 一对一,一对多,多对多操作
先进行如下操作: from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app=Flask(__name__) db=SQLAlchemy(app) 一对多: class Parent(db.Model):     id=db.Column(db.Integer,primary_key=True)     name=db.Column(db.String(30),unique=True)     children=db.re
用户1214487
2018/04/17
3.7K0
Flask 学习-77.Flask-SQLAlchemy 一对一关系增删改查
前言 SQLAlchemy 连接到关系型数据库,关系型数据最擅长的东西就是关系。 一对一模型设计 有个Student 记录学生基本信息,Contact表记录学生联系方式,Student和Contact是一对一关系。 class Student(db.Model): __tablename__ = 'student' # 数据库表名 id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.C
上海-悠悠
2022/09/28
3780
Flask 学习-77.Flask-SQLAlchemy 一对一关系增删改查
测试开发之路--Flask 之旅 (三):数据库
通过前两次的努力,我们对环境有了增删查改以及部署和查看日志的能力。 现在已经处于将就可用的状态。但其实还差了很重要的东西,就是权限的管理。 因为不能说每个用户上来都能随便的重启和删除环境吧,太容易出事故了。所以我们想起码有最基本的隔离性。
顾翔
2019/12/11
1.2K0
测试开发之路--Flask 之旅 (三):数据库
flask 操作数据库flask-sqlarchemy
from flask import Flask, render_template, session, redirect, url_for, flash from flask_bootstrap import Bootstrap from flask_sqlalchemy import SQLAlchemy
用户5760343
2019/07/07
7440
相关推荐
Flask(数据库操作 十一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档