Flask框架与ORM:过滤条件、外键约束与表关系解析

0 下载量 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全栈开发是至关重要的。