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_
来实现。