python flask中使用or查询和and查询,还有同时使用or、and的情况

在 Flask 中处理数据库查询时,通常会结合使用 ORM 工具,例如 SQLAlchemy。以下是 or 查询、and 查询以及两者同时使用的示例。

文章目录

  • 基础准备
  • [1. 使用 or_ 查询](#1. 使用 or_ 查询)
  • [2. 使用 and_ 查询](#2. 使用 and_ 查询)
  • [3. 同时使用 or_ 和 and_](#3. 同时使用 or_ 和 and_)
  • [4. 更加复杂的嵌套查询](#4. 更加复杂的嵌套查询)

基础准备

假设有一个模型 User,定义如下:

python 复制代码
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import or_, and_

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(100))
    age = db.Column(db.Integer)

1. 使用 or_ 查询

or_ 用于构造多个条件之间的"或"关系。例如,查询名字为 "Alice" 或者年龄大于 25 的用户:

python 复制代码
from sqlalchemy import or_

users = User.query.filter(or_(User.name == 'Alice', User.age > 25)).all()

2. 使用 and_ 查询

and_ 用于构造多个条件之间的"与"关系。例如,查询名字为 "Alice" 且年龄大于 25 的用户:

python 复制代码
from sqlalchemy import and_

users = User.query.filter(and_(User.name == 'Alice', User.age > 25)).all()

注意:在 SQLAlchemy 中,如果是简单的"与"关系,直接用逗号分隔条件即可,不需要显式使用 and_:

python 复制代码
users = User.query.filter(User.name == 'Alice', User.age > 25).all()

3. 同时使用 or_ 和 and_

假设查询的条件是:

● 名字为 "Alice" 或年龄大于 25,

● 并且邮箱以 "@example.com" 结尾。

可以这样组合:

python 复制代码
from sqlalchemy import or_, and_

users = User.query.filter(
    and_(
        or_(User.name == 'Alice', User.age > 25),
        User.email.like('%@example.com')
    )
).all()

4. 更加复杂的嵌套查询

例如,查询名字为 "Alice" 并且(年龄大于 25 或邮箱以 "@example.com" 结尾)的用户:

python 复制代码
users = User.query.filter(
    User.name == 'Alice',
    or_(
        User.age > 25,
        User.email.like('%@example.com')
    )
).all()
相关推荐
我命由我123453 分钟前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
青少儿编程课堂8 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析
c++·python·算法·bfs·信息学竞赛
冻柠檬飞冰走茶10 分钟前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
atwednesday29 分钟前
一文理解python中的task,协程,woker
python
Дерек的学习记录41 分钟前
Unreal Engine 5:第三人称运动系统和人物动画
开发语言·学习·ue5
用户0332126663671 小时前
使用 Python 在 Excel 中添加与删除筛选器
python·excel
Ramble_Naylor1 小时前
Rust深度解读:异步流(Async Streams)与生成器的处理艺术
开发语言·后端·rust
1M551 小时前
AI应用后端工程(03):回答输出一半就断了:AI 流式接口如何定义成功与失败?
python·面试·职场和发展·计算机专业·agent开发
努力实干1 小时前
简单工厂模式(Simple Factory Pattern)——C++
开发语言·c++·简单工厂模式
熊猫钓鱼>_>1 小时前
平行视界兼容模式与魔法变量配置避坑【鸿蒙心迹】
运维·服务器·开发语言·笔记·华为·harmonyos·openharmony