【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       27 阅读
  2. 协同过滤前置条件

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

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

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

    2024-06-10 20:14:04       13 阅读
  6. Mybatis-plus手写SQL如何使用条件构造器和分页

    2024-06-10 20:14:04       20 阅读
  7. vue如何在服务器端使用过滤器

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

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 20:14:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 20:14:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 20:14:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

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

热门阅读

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

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

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

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

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

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

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

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