【SQLAlChemy】filter过滤条件如何使用?

filter 过滤条件

生成 mock 数据

# 创建 session 对象
session = sessionmaker(bind=engine)()

# 本地生成mock数据
for i in range(6):
    # 生成随机名字, 长度为4到7个字符
    name = ''.join(random.choice(string.ascii_letters) for _ in range(random.randint(4, 7)))
    # 生成随机年龄, 范围为20到40
    age = random.randint(20, 40)
    user = User(name=name, age=age)
    # print(user.name, user.age)
    session.add(user)
    session.commit()

数据库表数据:

equals ==

# ==
# user = session.query(User).filter(User.age == 21).all()
# print(user)
'''
输出结果:[<User(name=KOBND, age=21)>]
'''

not equals !=

# !=
users = session.query(User).filter(User.age != 40).all()
for user in users:
    print(user)

'''
输出结果:
<User(name=ypb, age=18)>
<User(name=yxc, age=22)>
<User(name=wwQE, age=23)>
<User(name=nzUjld, age=36)>
<User(name=uzjcgd, age=38)>
<User(name=Kbvifw, age=27)>
<User(name=KOBND, age=21)>
'''

like & ilike

# like
users = session.query(User).filter(User.name.like('y%')).all()
for user in users:
    print(user)

'''
输出结果:
<User(name=ypb, age=18)>
<User(name=yxc, age=22)>
'''

# ilike (对大小写不敏感)
users = session.query(User).filter(User.name.ilike('y%')).all()
for user in users:
    print(user)
'''
输出结果:
<User(name=ypb, age=18)>
<User(name=yxc, age=22)>
'''

in

# in
users = session.query(User).filter(User.age.in_(range(18, 30))).all()
for user in users:
    print(user)
'''
输出结果:
<User(name=ypb, age=18)>
<User(name=yxc, age=22)>
<User(name=wwQE, age=23)>
<User(name=Kbvifw, age=27)>
<User(name=KOBND, age=21)>
'''

not in

# not in
# 第一种写法
users = session.query(User).filter(not_(User.age.in_(range(18, 30))))
# 第二种写法
users = session.query(User).filter(~(User.age.in_(range(18, 30))))
for user in users:
    print(user)
'''
输出结果:
<User(name=RPIaXC, age=40)>
<User(name=nzUjld, age=36)>
<User(name=uzjcgd, age=38)>
'''

is null

# is null
# 第一种写法
user = session.query(User).filter(User.age == None).all()
# 第二种写法
user = session.query(User).filter(User.age.is_(None)).all()
print(user)
'''
输出结果:[]
'''

is not null

# is not null
# 第一种写法
users = session.query(User).filter(User.name != None).all()
# 第二种写法
users = session.query(User).filter(User.name.isnot(None)).all()
for user in users:
    print(user)
'''
输出结果:
<User(name=ypb, age=18)>
<User(name=yxc, age=22)>
<User(name=wwQE, age=23)>
<User(name=RPIaXC, age=40)>
<User(name=nzUjld, age=36)>
<User(name=uzjcgd, age=38)>
<User(name=Kbvifw, age=27)>
<User(name=KOBND, age=21)>
'''

and

# and
# 第一种写法
user = session.query(User).filter(and_(User.name == 'ypb',User.age == 18)).first()
# 第二种写法
user = session.query(User).filter(User.name == 'ypb',User.age == 18).first()
# 第三种写法
user = session.query(User).filter(User.name == 'ypb').filter(User.age == 18).first()

print(user)
'''
输出结果:<User(name=ypb, age=18)>
'''

or

# or
users = session.query(User).filter(or_(User.age <= 20, User.age >= 30)).all()
for user in users:
    print(user)
'''
输出结果:
<User(name=ypb, age=18)>
<User(name=RPIaXC, age=40)>
<User(name=nzUjld, age=36)>
<User(name=uzjcgd, age=38)>
'''

注意

在 SQL 中,NULL 值具有一些特殊的行为,这可能会影响到你的过滤条件。例如,使用 == 操作符比较一个字段和 NULL 值将不会返回任何结果,即使字段中确实有 NULL 值。在这种情况下,你应该使用 is NULL 或者 is not NULL

相关推荐

  1. Pandas 条件 关键字过滤

    2024-06-10 20:14:04       30 阅读
  2. 协同过滤前置条件

    2024-06-10 20:14:04       23 阅读
  3. SQL查询:如何在where条件使用子查询

    2024-06-10 20:14:04       22 阅读
  4. Elasticsearch 多索引条件过滤:字段匹配

    2024-06-10 20:14:04       41 阅读
  5. Oracle左连接过滤条件注意事项

    2024-06-10 20:14:04       8 阅读
  6. getline的使用条件以及限制条件

    2024-06-10 20:14:04       16 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 20:14:04       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 20:14:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 20:14:04       4 阅读
  4. Python语言-面向对象

    2024-06-10 20:14:04       7 阅读

热门阅读

  1. 公式面试题总结(三)

    2024-06-10 20:14:04       14 阅读
  2. 【设计模式】基本名词

    2024-06-10 20:14:04       17 阅读
  3. leetcode290:单词规律

    2024-06-10 20:14:04       21 阅读
  4. 回溯算法复原ip,子集1和子集2

    2024-06-10 20:14:04       21 阅读
  5. 43.django里写自定义的sql进行查询

    2024-06-10 20:14:04       15 阅读
  6. 独孤思维:副业圈很多骗子

    2024-06-10 20:14:04       17 阅读
  7. Hive 面试题(九)

    2024-06-10 20:14:04       19 阅读