Flask框架与ORM:过滤条件、外键约束与表关系解析
130 浏览量
更新于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全栈开发是至关重要的。
208 浏览量
177 浏览量
点击了解资源详情
376 浏览量
350 浏览量
2023-06-12 上传
553 浏览量
2024-01-11 上传
2024-07-04 上传
weixin_38681147
- 粉丝: 7
- 资源: 936