下面的一对多关系以作者和文章为例:

首先创建一个文章表:

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一对多关系详解相关推荐

  1. 好程序员前端教程之JavaScript闭包和匿名函数的关系详解...

    好程序员前端教程之JavaScript闭包和匿名函数的关系详解 本文讲的是关于JavaScript闭包和匿名函数两者之间的关系,从匿名函数概念到立即执行函数,最后到闭包.下面一起来看看文章分析,希望你 ...

  2. 关系型数据库表之间的联系[关系]详解

    关系型数据库表之间的联系[关系]详解 在表中,行和列的逻辑顺序无关紧要.每个表至少包含一列,该列被称为主键,它唯一地标识了表中的每一行. 键是表中扮演特殊角色的列,有两种键:主键.外键. 主键(Pri ...

  3. UML类图与类的关系详解

    UML类图与类的关系详解   2011-04-21 来源:网络   在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...

  4. 【OFDM系列2】OFDM复信号符号信噪比EsN0、比特信噪比EbN0、SNR的含义及关系详解

    更基础的各类信噪比的关系请看博客 [干货2020.12.13更新]实信号.复信号Es.N0.符号信噪比EsN0.带内信噪比.比特信噪比EbN0.SNR的含义及关系详解 本文只讨论OFDM复信号的信噪比 ...

  5. 文件的复制、移动、压缩等对SELinux属性关系详解

    文件的复制.移动.压缩等对SELinux属性关系详解 1.临时修改文件的类型属性 文件的类型属性不正确是常见的SELinux拒绝访问的主要原因 1)修改文件的SELinux属性: [root@loca ...

  6. Java中常见RuntimeException与其他异常表及Exception逻辑关系详解

    Java中常见RuntimeException与其他异常表及Exception逻辑关系详解 前言 常见`RuntimeException` 其他错误类型 `Error`类 `Exception`类 E ...

  7. slf4j log4j logback关系详解和相关用法 【by Sinte-Beuve】

    slf4j log4j logback关系详解和相关用法 slf4j log4j logback的关系 The Simple Logging Facade for Java是什么? log4j和log ...

  8. Linux和GNU系统的关系详解

    今天广泛使用的 GNU 版本通常被称为"Linux",而它的许多用户并不知道 它基本上是由GNU 项目开发的 GNU 系统 . Linux内核 和 GNU 系统简介 确实有一个 L ...

  9. UML类图-六种关系详解

    UML基本介绍 UML--Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果 UML本身 ...

最新文章

  1. 努力成为优秀的工程师
  2. 关于数组集合之间的转换
  3. dedecms 漏洞_代码审计之二次漏洞审计
  4. jQuery中通过JSONP来跨域获取数据的三种方式
  5. 送什么给女朋友最致命?
  6. 关于int类型除以1000后保留两位小数的问题,并且在excel里打印出来
  7. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的驾校预约系统
  9. 赛码网算法: 格子游戏
  10. 2021-09-08因子分解机
  11. java项目开发经验总结
  12. SHA1算法实现及详解
  13. 装机必备的浏览器推荐,干净好用,选这4款不会出错
  14. 供应链库存管理-库存控制策略
  15. 高度自律学习者的app
  16. druid数据源下 sqlserver 出现 对象名 'xxx' 无效
  17. iPhone苹果手机支付宝App Store消费红包怎么使用?
  18. 关于Ubuntu下的PDF阅读器
  19. python 中的 chr ord和repr
  20. CN和CSK运动跟踪算法

热门文章

  1. 2017美国专利榜:IBM称霸全球!华为、京东方榜上有名!
  2. String和StringBuilder、StringBuffer的区别?
  3. 2017-06-18 前端日报
  4. Application Performance Management Monitoring | New Relic
  5. 角色权限模块设计-数据pdm
  6. Docbook之一:概念 DOM schema xsl xsl-xslt xsl-fo
  7. mysql进度查看_MySQL长查询进度监控
  8. worknc的后处理如何安装_UG NX后处理安装方法(新手入门)
  9. linux windows爆音,升级Windows 10后 部分情况下有爆音,杂音,音频卡顿现象
  10. 什么是认证、授权、会话