Flask框架数据库操作指南:过滤条件与表关系解析
85 浏览量
更新于2024-08-31
收藏 303KB PDF 举报
本文主要介绍了在Flask框架中如何使用SQLAlchemy进行数据库操作,特别是数据库过滤条件、外键、四种约束、表关系以及反向查询模型属性。
在Flask应用中,SQLAlchemy作为ORM(对象关系映射)工具,允许开发者以面向对象的方式来操作数据库。以下是对关键知识点的详细讲解:
1. 数据库过滤条件:
- equals:等于,例如`filter(Article.title == '某个标题')`,用于查找标题等于指定值的文章。
- not equals:不等于,如`filter(Article.title != '某个标题')`,用于排除特定标题的文章。
- like:模糊匹配,比如`filter(Article.title.like('%关键字%'))`,找到标题包含特定关键字的文章。
- in:存在于列表内,如`filter(Article.id.in_([1, 2, 3]))`,找出ID在给定列表中的文章。
- not in:不在列表内,如`filter(~Article.id.in_([1, 2, 3]))`,排除ID在给定列表的文章。
- is null:为空,如`filter(Article.price.is_(None))`,查找价格字段为空的文章。
- is not null:非空,如`filter(Article.price.is_not(None))`,查找价格不为空的文章。
- and_:逻辑与,多个条件同时满足,如`filter(Article.title == '标题' & Article.price > 100)`。
- or_:逻辑或,至少满足一个条件,如`filter(or_(Article.title == '标题1', Article.title == '标题2'))`。
2. 外键及其四种约束:
- 外键(Foreign Key):外键用于关联两个表,确保数据的一致性和完整性。在定义模型时,可以使用`Column`和`ForeignKey`来设置外键,例如`user_id = Column(Integer, ForeignKey('users.id'))`,这表示`article2`表中的`user_id`字段引用`users`表的`id`字段。
- UNIQUE约束:确保字段的唯一性,如`Column(String(50), unique=True)`,确保标题字段的值在表中是唯一的。
- NOT NULL约束:不允许字段值为空,如`Column(String(50), nullable=False)`,确保标题字段不能为空。
- CHECK约束:定义字段值的限制条件,如`Column(Integer, check=lambda value: 0 <= value <= 100)`,确保价格字段的值在0到100之间。
3. 表关系:
- 一对一关系(One-to-One):一个实体对应另一个实体的唯一实例,通常通过外键实现。
- 一对多关系(One-to-Many):一个实体对应多个实例,如一篇文章有多个评论,可以通过在子模型上设置外键实现。
- 多对一关系(Many-to-One):多个实体对应一个实例,如多个评论对应一篇文章,外键放在子模型上。
- 多对多关系(Many-to-Many):通过关联表(join table)连接两个实体,如用户和角色之间的关系。
4. 反向查询模型属性:
- 当定义了表间关系后,可以使用反向查询来获取关联的对象。例如,如果`User`模型有一个`articles`属性(通过外键关联`Article`模型),则可以使用`user.articles`来获取该用户的所有文章。
示例代码中,创建了数据库引擎和`Base`类,并定义了一个`Article`模型,包括`id`、`title`和`price`字段。`Base.metadata.create_all()`用于在数据库中创建对应的表结构。`Session`是SQLAlchemy的会话对象,用于执行CRUD操作。
总结,Flask结合SQLAlchemy提供了强大的数据库操作能力,使得开发者能够方便地处理数据过滤、模型间的关系,以及通过反向查询属性来简化数据库交互。
2020-09-22 上传
点击了解资源详情
点击了解资源详情
2024-10-04 上传
2020-09-20 上传
2021-01-20 上传
2024-06-06 上传
2020-09-16 上传
2020-09-21 上传
weixin_38659159
- 粉丝: 6
- 资源: 961
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫