Flask框架与ORM:过滤条件、外键约束与表关系解析
180 浏览量
更新于2024-08-29
收藏 256KB PDF 举报
"Python全栈(七)Flask框架之7.ORM过滤条件、外键约束和表关系"
在Python的Web开发中,Flask框架是一个轻量级且强大的选择。本资源主要讲解了如何在Flask中使用ORM(对象关系映射)进行数据库操作,特别是过滤条件的设置、外键约束的创建以及表之间的关系处理。
一、Flask数据库过滤条件
Flask中的SQLAlchemy ORM提供了多种过滤条件来查询数据库。以下是一些基本的示例:
1. 等于条件:使用`filter()`方法和`==`操作符,例如`filter(Book.name == 'Name 3')`,将返回所有名字为'Name 3'的书籍记录。
2. 不等于条件:`filter(Book.name != 'Name 3')`,查找名字不等于'Name 3'的书籍。
3. LIKE条件:`filter(Book.name.like('%Name%'))`,查找名字包含'Name'的书籍。
4. 在集合内的条件:`filter(Book.name.in_(['Name1', 'Name2']))`,找到名字为'Name1'或'Name2'的书籍。`in_`函数也可接受查询结果作为参数。
5. 不在集合内的条件:`filter(~Book.name.in_(['Name1', 'Name2']))`,排除名字为'Name1'和'Name2'的书籍。
6. 是否为空条件:`filter(Book.name == None)` 或 `filter(Book.name.is_(None))`,查找名字为空的书籍。
7. 不为空条件:`filter(User.name != None)` 或 `filter(User.name.isnot(None))`,查找名字不为空的用户。
8. AND条件:`filter(Book.name == 'Name1', Book.price <= 50).all()`,可以组合多个条件,查找名字为'Name1'且价格小于等于50的书籍。
9. OR条件:`filter(or_(Book.name == 'Name1', Book.price >= 50)).all()`,查找名字为'Name1'或价格大于等于50的书籍。
二、ORM模型的外键约束
1. 建立外键关系:在定义模型时,可以通过`ForeignKey`指定外键,如`author_id = Column(Integer, ForeignKey('authors.id'))`,表示该列是引用`authors`表中的`id`字段。
2. 数据库外键约束:外键会确保引用完整性,防止删除父记录时,有子记录依赖的错误。
3. 存在外键时的数据查询:可以通过关联查询来获取相关联的数据,比如通过`books = Book.query.join(Author).filter(Author.name == 'Author1')`来获取作者为'Author1'的所有书籍。
三、Flask数据库表关系
1. 一对多关系:一个作者可以有多本书,例如在`Author`和`Book`模型中,`Author`有一对多关系到`Book`,通过`relationship()`定义,如`books = relationship('Book', backref='author')`。
总结来说,Flask的ORM功能强大,允许开发者以面向对象的方式处理数据库操作,同时通过外键约束和表关系,可以方便地处理复杂的数据结构。过滤条件的多样性使得数据查询灵活而高效。学习并熟练掌握这些知识点对于进行Python全栈开发是至关重要的。
2020-12-21 上传
2021-10-22 上传
2023-06-12 上传
2021-11-22 上传
点击了解资源详情
点击了解资源详情
2023-09-28 上传
2024-01-11 上传
weixin_38681147
- 粉丝: 7
- 资源: 937
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明