📜  SQLAlchemy核心-使用集合操作(1)

📅  最后修改于: 2023-12-03 15:35:07.170000             🧑  作者: Mango

SQLAlchemy核心-使用集合操作

SQLAlchemy核心是一个面向关系型数据库的Python SQL工具包。它是一个ORM(对象关系映射)工具,它提供了一个抽象层,允许我们直接使用Python代码来访问和操作数据库。

集合操作是SQLAlchemy核心中一个非常有用和强大的功能。它允许我们对数据库中的数据进行分组、排序、过滤和聚合操作,并且提供了一种自然的方式来表达这些操作。

本文将介绍SQLAlchemy核心中的集合操作。

集合操作

集合操作定义了SQLAlchemy核心库中最重要的抽象层:集合。集合是一种对象,表示一个SQL语句的结果集,可以对其进行各种操作。

集合操作包括:

  • 过滤操作
  • 排序操作
  • 分组操作
  • 聚合操作
  • 常用函数操作

下面将会涵盖这些操作。

过滤操作

过滤操作是集合操作中最常见的操作之一。它允许我们从集合中选择符合某个条件的记录。

SQLAlchemy提供了一系列常用的过滤操作,包括==!=><>=<=LIKEINNOT IN等。具体使用方式如下:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///test.db')
Session = sessionmaker(bind=engine)
session = Session()

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

Base.metadata.create_all(engine)

# 对age字段进行过滤
results = session.query(User).filter(User.age>18)
# 对name字段进行过滤
results = session.query(User).filter(User.name=='Alice')
# 包含指定字符串的过滤
results = session.query(User).filter(User.name.like('Alice%'))
# 包含两个指定字符串的过滤
results = session.query(User).filter(User.name.like('%Alice%'))
# in和not in过滤
results = session.query(User).filter(User.name.in_(['Alice', 'Bob']))
results = session.query(User).filter(User.name.notin_(['Alice', 'Bob']))
排序操作

排序操作可以让我们对集合中的记录进行排序。

SQLAlchemy提供了两种排序操作:asc()desc()。具体使用方式如下:

# 对age字段进行升序排序
results = session.query(User).order_by(User.age.asc())
# 对name字段进行降序排序
results = session.query(User).order_by(User.name.desc())
分组操作

分组操作是将数据按照一定规则分成若干组的操作。分组操作通常与聚合函数配合使用。

SQLAlchemy提供了一种非常便捷的分组操作,即group_by()。具体使用方式如下:

# 按照age分组
results = session.query(User.age, func.count(User.id))
                 .group_by(User.age)
聚合操作

聚合操作是一种将多个值计算为单个值的操作。

SQLAlchemy提供了许多常用的聚合函数,包括count()sum()avg()min()max()等。它们可以应用于整个集合,也可以应用于分组后的子集。

具体使用方式如下:

# 计算年龄总和
result = session.query(func.sum(User.age)).scalar()
# 计算每个人年龄的平均值
results = session.query(User.name, func.avg(User.age))
                 .group_by(User.name)
常用函数操作

SQLAlchemy提供了很多常用的函数操作,如date()distinct()exists()concat()cast()等。

有关常用函数的详细信息,请参阅官方文档。

总结

这篇文章介绍了SQLAlchemy核心中集合操作的一些基本知识,包括过滤操作、排序操作、分组操作、聚合操作和常用函数操作。

集合操作非常强大和灵活,可以方便地完成各种复杂的数据库操作。掌握这些操作可以使你在Python中更加有效地访问和操作数据库。