前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
rust多线程
在rust中,多线程编程不算困难,但是也需要留心和别的编程语言中不同的地方。rust的标准库中提供的thread库来帮助我们进行多线程编程。在使用的时候需要使用use std::thread来引入thread库即可。
zy010101
2023/05/28
1K0
Rust常用并发示例代码
如果method1()被多次调用,就会创建多个线程,如果希望不管调用多少次,只能有1个线程,在不使用线程池的前提下,有1个简单的办法:
菩提树下的杨过
2022/09/28
1K0
Rust常用并发示例代码
透过 Rust 探索系统的本原:并发原语
几周前我写了篇关于并发的文章(透过 rust 探索系统的本原:并发篇),从使用者的角度介绍了常用的处理并发的工具:Mutex / RwLock / Channel,以及 async/await。今天我们讲讲这些并发手段背后的原语。这些原语,大家在操作系统课程时大多学过,但如果不是做一些底层的开发,估计大家都不记得了。今天,我们就来简单聊聊这些基础的并发原语,了解它们的差异,明白它们使用的场景,对撰写高性能的并发应用有很大的帮助。
tyrchen
2021/04/07
1.2K0
透过 Rust 探索系统的本原:并发原语
Rust中channel的使用
Rust的channel是一种用于在不同线程间传递信息的通信机制,它实现了线程间的消息传递。
fliter
2024/03/07
3420
Rust中channel的使用
【Rust 基础篇】Rust 通道(Channel)
在 Rust 中,通道(Channel)是一种用于在多个线程之间传递数据的并发原语。通道提供了一种安全且高效的方式,允许线程之间进行通信和同步。本篇博客将详细介绍 Rust 中通道的使用方法,包含代码示例和对定义的详细解释。
繁依Fanyi
2023/10/12
4110
Rust学习笔记之并发
今天,我们继续「Rust学习笔记」的探索。我们来谈谈关于「Rust学习笔记之并发」的相关知识点。
前端柒八九
2023/08/01
2940
Rust学习笔记之并发
【Rust 基础篇】Rust 通道实现单个消费者多个生产者模式
在 Rust 中,我们可以使用通道(Channel)来实现单个消费者多个生产者模式,简称为 MPMC。MPMC 是一种常见的并发模式,适用于多个线程同时向一个通道发送数据,而另一个线程从通道中消费数据的场景。本篇博客将详细介绍 Rust 中单个消费者多个生产者模式的实现方法,包含代码示例和对定义的详细解释。
繁依Fanyi
2023/10/12
5390
Rust 总结
所有权是用来管理堆上内存的一种方式,在编译阶段就可以追踪堆内存的分配和释放,不会对程序的运行期造成任何性能上的损失。
谛听
2022/06/04
1.8K0
深入理解Rust的Atomic及Ordering
之前提到的Mutex、Condvar是Rust中比较偏高层的共享数据型并发控制,更底层的并发控制也有,比如Atomic(原子操作)。
newbmiao
2023/12/26
6360
深入理解Rust的Atomic及Ordering
[Rust教程] RUST支持Sync的最简Queue实现
以下是RUST标准库mpsc的queue代码分析, 代码路径:library/std/src/mpsc/mpsc_queue.rs 几乎是见到的最简单的一个支持多线程写,单线程读的队列数据结构了。
MikeLoveRust
2022/06/10
6280
Rust网络编程框架-深入理解Tokio中的管道
我们在上文《Rust网络编程框架-Tokio进阶》介绍了async/await和锁的基本用法,并完成了一个Server端的DEMO代码。本文继续来探讨这个话题。
beyondma
2021/09/25
1.7K0
Rust入坑指南:齐头并进(上)
我们知道,如今CPU的计算能力已经非常强大,其速度比内存要高出许多个数量级。为了充分利用CPU资源,多数编程语言都提供了并发编程的能力,Rust也不例外。<!-- more -->
Jackeyzhe
2020/03/22
1.2K0
你应该知晓的Rust Web 框架
在之前的用 Rust 搭建 React Server Components 的 Web 服务器我们利用了Axum构建了RSC的服务器。也算是用Rust在构建Web服务上的小试牛刀。
前端柒八九
2023/11/17
3K0
你应该知晓的Rust Web 框架
【翻译】RUST无锁编程
本文内容译自Lock-freedom without garbage collection,中间有少量自己的修改.
MikeLoveRust
2020/03/19
2K0
【Rust日报】2019-12-19 Writing BPF code in Rust
Includes new APIs, utilities, and fixes. Some highlights:
MikeLoveRust
2019/12/25
6620
【Rust日报】2019-12-19 Writing BPF code in Rust
Rust并发控制之Channel
Rust 官方sync包中提供了mpsc模式的 (多生产者,单消费者:multi-producer, single-consumer) channel,可以实现基于消息并发控制,而不是依赖控制内存共享(加锁)。这正是 go 语言作者 R. Pike 所推崇的方式:
newbmiao
2023/12/13
3520
Rust并发控制之Channel
Rayon魔法:使Rust并行编程变得轻而易举
Rayon库是一个数据并行化(data-parallelism)的 Rust库。在并行编程里是一个很有趣的存在, 且非常的容易上手。它可以很轻松地将同步计算流程转化为并行计算。而且基本能保证编译通过就不会有data race。
newbmiao
2024/01/17
6870
Rayon魔法:使Rust并行编程变得轻而易举
【Rust 日报】2021-03-25 linux-next的rust-next分支被合并了!
Github: https://github.com/zesterer/flume
MikeLoveRust
2021/04/22
6780
【翻译】从头实现Rust异步执行器
原文:https://stjepang.github.io/2020/01/31/build-your-own-executor.html 现在我们已经构建了block_on函数,是时候进一步将其转换为一个真正的执行器了。我们希望我们的遗执行器不只是一次运行一个future,而是同时运行多个future!
MikeLoveRust
2020/07/23
9170
Rust异步编程之Future并发处理
上篇文章我们知道,Rust的Future是异步执行,await时是阻塞在当前的异步任务task上,直到完成。
newbmiao
2024/01/11
5130
Rust异步编程之Future并发处理
相关推荐
rust多线程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档