欢迎访问宙启技术站
智能推送

掌握BaseQuery()的常用查询方法

发布时间:2024-01-03 01:26:35

BaseQuery()是SQLAlchemy中的一个查询构造器,它提供了一系列常用的查询方法,用于构建和执行查询语句。下面是BaseQuery()的一些常用查询方法和使用示例。

1. filter()方法:用于添加过滤条件,只返回符合条件的结果集。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建数据库引擎
engine = create_engine('mysql+mysqlconnector://username:password@localhost:3306/database')
# 创建Session会话
Session = sessionmaker(bind=engine)
session = Session()

# 创建BaseQuery对象
Base = declarative_base()

# 定义模型类
class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    age = Column(Integer)

# 查询年龄大于等于18的用户
users = session.query(User).filter(User.age >= 18).all()
for user in users:
    print(user.name, user.age)

2. order_by()方法:用于设置结果集的排序方式。

# 按照年龄降序排列用户
users = session.query(User).order_by(User.age.desc()).all()
for user in users:
    print(user.name, user.age)

3. distinct()方法:用于去除结果集中的重复记录。

# 查询不重复的年龄
ages = session.query(User.age).distinct().all()
for age in ages:
    print(age[0])

4. join()方法:用于连接多个表进行查询。

from sqlalchemy.orm import relationship

# 定义模型类
class Post(Base):
    __tablename__ = 'post'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('user.id'))
    content = Column(String(100))
    user = relationship("User", backref="posts")

# 查询用户及其对应的所有文章
users = session.query(User).join(Post).all()
for user in users:
    print(user.name)
    for post in user.posts:
        print(post.content)

5. limit()方法:用于限制结果集的数量。

# 查询前3个用户
users = session.query(User).limit(3).all()
for user in users:
    print(user.name)

6. offset()方法:用于设置结果集的偏移量。

# 查询从第4个用户开始的三个用户
users = session.query(User).offset(3).limit(3).all()
for user in users:
    print(user.name)

7. group_by()方法:用于对结果集进行分组。

# 查询每个年龄段的用户数量
users = session.query(User.age, func.count(User.id)).group_by(User.age).all()
for age, count in users:
    print(age, count)

8. having()方法:用于对分组结果进行条件过滤。

# 查询年龄大于等于18的每个年龄段的用户数量
users = session.query(User.age, func.count(User.id)).group_by(User.age).having(User.age >= 18).all()
for age, count in users:
    print(age, count)

9. count()方法:用于计算结果集的数量。

# 查询用户的总数量
user_count = session.query(User).count()
print(user_count)

以上是BaseQuery()常用的查询方法和使用示例,通过这些方法可以构建出各种复杂的查询语句,并且灵活地操作数据库中的数据。