flask sqlalchemy一对多关系详解
下面的一对多关系以作者和文章为例:
首先创建一个文章表:
class Post(db.Model):
id = db.Column(db.Integer(),primary_key=True)
title = db.Column(db.String(255))
text = db.Column(db.Text())
publish_date = db.Column(db.DateTime())
user_id = db.Column(db.Integer(),db.ForeignKey('user.id'))
此处注意:
user_id字段,表示一个外键约束,(外键约束是一种约束规则,它强制要求user_id字段的值存在于user表的id列中,这是数据库进行的一项检查,用来保证每个Post对象都会对应得到一个已有的user)
传给db.ForeignKey的参数,是一个用来代表user表id列的字符串,如果user表中用__tablename__自定义表名,则需要用自定义的表名
(多的一方写ForeignKey)
下面创建作者表:
class User(db.Model):
id = db.Column(db.Integer(),primary_key=True)
username = db.Column(db.String(255))
password = db.Column(db.String(255))
posts = db.relationship('Post',backref='user',lazy='dynamic')
现在我们通过使用User.posts属性来得到一个posts列表
backref参数可以使我们通过Post.user属性对User对象进行读取和修改
简记:
一的一方写relationship,可以通过表名.字段得到一个列表
多的一方写ForeignKey,可以通过表名.(一的一方的backref)对一的一方进行读取和修改
使用Join进行关联查询:
join查询参考下面的链接:https://www.thatyou.cn/flask%E4%BD%BF%E7%94%A8flask-sqlalchemy%E6%93%8D%E4%BD%9Cmysql%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%88%E4%B8%89%EF%BC%89-%E8%81%94%E8%A1%A8%E4%B8%80%E5%AF%B9%E5%A4%9A%E6%9F%A5%E8%AF%A2/
下面对flask sqlalchemy查询进行详细说明:
SQLAlchemy 可以通过Model.query方法对数据进行查询,Model.query是db.session.query(Model)的简写
一,
使用all()获取数据库中的所有行,并作为列表返回。
eg1. User.query.all()
可以通过limit()函数来指定希望返回的总行数
User.query.limit(10).all()
可以通过order_by控制排序方式(并不是默认的按照主键进行排序)
正向排序: User.query.order_by(User.username).all()
逆向排序:User.query.order_by(User.username.desc()).all()
如果想只返回一行数据,则可以使用first()代替all()
User.query.first()
要通过主键取得一行数据,可使用query.get()
User.query.get(1)
上面的这些函数可以链式调用
User.query.order_by(User.username).limit(10).all()
first()和all()方法会返回结果,并且终止链式调用,pagination(分页),可以用来替代first()和all(),不过pagination方法跟first()和all()方法有区别,paginnation得到的是一个pagination对象,而不是对象列表
page=User.query.paginate(1,10)
得到的这个page(pagination对象有几个属性)
page.items 返回的是User对象列表(这个是最常用的,其他的先不写)
二
条件查询:
根据一些条件的集合获得过滤后的数据,要得到满足一系列等式条件的列表,比如,要得到用户名为fake_name的用户列表,可以这样:
User.query.filter_by(username='fake_name').all()
当然filter_by函数也是可以链式调用的,如下:
User.query.order_by(User.username.desc()).filter_by(username='fake_name').limit(2).all()
注意:filter_by只有在你确切的知道查找的值时,才可以用
filter则可以避免(filter可以接受任何python表达式<,>,==)
User.query.filter(user.id>1).all()
转载于:https://www.cnblogs.com/daqingzi/p/9454969.html
flask sqlalchemy一对多关系详解相关推荐
- 好程序员前端教程之JavaScript闭包和匿名函数的关系详解...
好程序员前端教程之JavaScript闭包和匿名函数的关系详解 本文讲的是关于JavaScript闭包和匿名函数两者之间的关系,从匿名函数概念到立即执行函数,最后到闭包.下面一起来看看文章分析,希望你 ...
- 关系型数据库表之间的联系[关系]详解
关系型数据库表之间的联系[关系]详解 在表中,行和列的逻辑顺序无关紧要.每个表至少包含一列,该列被称为主键,它唯一地标识了表中的每一行. 键是表中扮演特殊角色的列,有两种键:主键.外键. 主键(Pri ...
- UML类图与类的关系详解
UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...
- 【OFDM系列2】OFDM复信号符号信噪比EsN0、比特信噪比EbN0、SNR的含义及关系详解
更基础的各类信噪比的关系请看博客 [干货2020.12.13更新]实信号.复信号Es.N0.符号信噪比EsN0.带内信噪比.比特信噪比EbN0.SNR的含义及关系详解 本文只讨论OFDM复信号的信噪比 ...
- 文件的复制、移动、压缩等对SELinux属性关系详解
文件的复制.移动.压缩等对SELinux属性关系详解 1.临时修改文件的类型属性 文件的类型属性不正确是常见的SELinux拒绝访问的主要原因 1)修改文件的SELinux属性: [root@loca ...
- Java中常见RuntimeException与其他异常表及Exception逻辑关系详解
Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...
- slf4j log4j logback关系详解和相关用法 【by Sinte-Beuve】
slf4j log4j logback关系详解和相关用法 slf4j log4j logback的关系 The Simple Logging Facade for Java是什么? log4j和log ...
- Linux和GNU系统的关系详解
今天广泛使用的 GNU 版本通常被称为"Linux",而它的许多用户并不知道 它基本上是由GNU 项目开发的 GNU 系统 . Linux内核 和 GNU 系统简介 确实有一个 L ...
- UML类图-六种关系详解
UML基本介绍 UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果 UML本身 ...
最新文章
- 努力成为优秀的工程师
- 关于数组集合之间的转换
- dedecms 漏洞_代码审计之二次漏洞审计
- jQuery中通过JSONP来跨域获取数据的三种方式
- 送什么给女朋友最致命?
- 关于int类型除以1000后保留两位小数的问题,并且在excel里打印出来
- 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
- 基于JAVA+SpringMVC+Mybatis+MYSQL的驾校预约系统
- 赛码网算法: 格子游戏
- 2021-09-08因子分解机
- java项目开发经验总结
- SHA1算法实现及详解
- 装机必备的浏览器推荐,干净好用,选这4款不会出错
- 供应链库存管理-库存控制策略
- 高度自律学习者的app
- druid数据源下 sqlserver 出现 对象名 'xxx' 无效
- iPhone苹果手机支付宝App Store消费红包怎么使用?
- 关于Ubuntu下的PDF阅读器
- python 中的 chr ord和repr
- CN和CSK运动跟踪算法
热门文章
- 2017美国专利榜:IBM称霸全球!华为、京东方榜上有名!
- String和StringBuilder、StringBuffer的区别?
- 2017-06-18 前端日报
- Application Performance Management Monitoring | New Relic
- 角色权限模块设计-数据pdm
- Docbook之一:概念 DOM schema xsl xsl-xslt xsl-fo
- mysql进度查看_MySQL长查询进度监控
- worknc的后处理如何安装_UG NX后处理安装方法(新手入门)
- linux windows爆音,升级Windows 10后 部分情况下有爆音,杂音,音频卡顿现象
- 什么是认证、授权、会话