Flask框架数据库操作指南:过滤条件与表关系解析

0 下载量 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提供了强大的数据库操作能力,使得开发者能够方便地处理数据过滤、模型间的关系,以及通过反向查询属性来简化数据库交互。