欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 【SQLAlChemy】filter过滤条件如何使用?

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

2024/10/24 3:22:55 来源:https://blog.csdn.net/weixin_55818116/article/details/139580484  浏览:    关键词:【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到40age = 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com