sqlalchemy 多个 and 或 or

在使用SQLAlchemy进行数据库查询时,常常会遇到需要同时使用多个and和or的情况,以满足不同的筛选条件。本文将详细讲解如何在SQLAlchemy中使用多个and和or来构建复杂的查询条件。
基本查询
首先,我们先来回顾一下SQLAlchemy中的基本查询方式。假设我们有一个名为User的表,其中包含id、name和age三个字段。我们需要查询年龄大于25且名字为Alice或Bob的用户,可以使用以下代码:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 添加测试数据
session.add_all([
User(name='Alice', age=30),
User(name='Bob', age=22),
User(name='Cathy', age=28)
])
session.commit()
# 查询年龄大于25且名字为Alice或Bob的用户
users = session.query(User).filter(User.age > 25).filter(User.name.in_(['Alice', 'Bob'])).all()
for user in users:
print(user.name, user.age)
在上面的代码中,我们使用filter方法来添加查询条件,其中User.age > 25表示年龄大于25,User.name.in_(['Alice', 'Bob'])表示名字为Alice或Bob。这样就可以实现简单的多条件查询。
多个and条件
接下来,我们将介绍如何在SQLAlchemy中使用多个and条件。假设我们需要查询年龄大于25、名字包含A且不是Alice的用户,可以使用以下代码:
from sqlalchemy import and_
users = session.query(User).filter(and_(User.age > 25, User.name.like('%A%'), User.name != 'Alice')).all()
for user in users:
print(user.name, user.age)
在代码中,我们使用and_函数将多个条件组合在一起,然后传给filter方法。这样就可以筛选出满足所有条件的用户。
多个or条件
除了使用and_来组合多个and条件外,我们还可以使用or_来组合多个or条件。例如,查询年龄大于25或名字为Cathy的用户,可以使用以下代码:
from sqlalchemy import or_
users = session.query(User).filter(or_(User.age > 25, User.name == 'Cathy')).all()
for user in users:
print(user.name, user.age)
在以上代码中,我们使用or_函数将多个or条件组合在一起,然后传给filter方法。这样就可以找出满足任一条件的用户。
同时使用and和or条件
有时候,我们需要同时使用and和or条件来构建复杂的查询。例如,查询年龄大于25、名字包含A且不是Alice或名字为Cathy的用户,可以使用以下代码:
users = session.query(User).filter(and_(User.age > 25, User.name.like('%A%'), User.name != 'Alice') | (User.name == 'Cathy')).all()
for user in users:
print(user.name, user.age)
在上述代码中,我们使用and_将前三个条件组合在一起,然后使用or将这个组合条件和User.name == 'Cathy'组合在一起。这样就实现了同时使用and和or条件的查询。
总结
通过本文的介绍,我们学习了如何在SQLAlchemy中使用多个and和or条件来构建复杂的查询。使用and_和or_函数可以方便地组合多个条件,满足不同的查询需求。在实际开发中,我们可以根据具体的需求灵活运用这些方法,构建出高效且准确的查询条件。如果有更复杂的查询需求,也可以通过多层嵌套and_和or_来实现。
极客教程