📜  SQLAlchemy ORM-使用查询(1)

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

SQLAlchemy ORM-使用查询

SQLAlchemy是一个Python SQL工具包和ORM框架,它具有强大的SQL查询功能。SQLAlchemy ORM是SQLAlchemy的ORM模块,它提供了一种基于Python对象的SQL查询语言,使数据库访问变得更加简单和直观。

在本文中,我们将介绍如何使用SQLAlchemy ORM进行查询。

连接到数据库

首先,我们需要连接到数据库。使用SQLAlchemy ORM连接到数据库有两种方法:

  1. 使用SQLAlchemy的create_engine()函数创建一个引擎,并通过该引擎连接到数据库。
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:password@host:port/dbname')
  1. 使用SQLAlchemy的create_engine()函数创建一个引擎,然后通过create_all()方法创建一个模型(也称为表),模型将映射到数据库中的表。
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

engine = create_engine('postgresql://user:password@host:port/dbname')

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

在本文中,我们将使用第一种方法。

创建一个会话

创建一个数据库会话将允许我们在Python中执行SQLAlchemy ORM查询。我们将首先使用Session类创建一个会话。

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()
执行查询

现在,我们准备好执行查询了。

查询所有记录

以下代码可查询表中的所有记录:

users = session.query(User).all()

该语句使用查询对象的all()方法查询给定类型的所有对象。

使用过滤器

我们可以使用过滤器查询满足特定条件的记录。以下代码查询所有年龄大于18岁的用户:

users = session.query(User).filter(User.age > 18).all()
使用多个过滤器

我们还可以使用多个过滤器查询满足多个条件的记录。以下代码查询所有年龄大于18岁且名字为'John'的用户:

users = session.query(User).filter(User.age > 18).filter(User.name == 'John').all()
使用LIKE和IN

我们可以使用like()方法和in_()方法查询满足特定条件的记录。以下代码查询所有名字以'J'开头的用户:

users = session.query(User).filter(User.name.like('J%')).all()

以下代码查询所有名字为'John'或'Mary'的用户:

users = session.query(User).filter(User.name.in_(['John', 'Mary'])).all()
选择特定字段

如果我们只需要查询表中的特定字段,我们可以使用查询对象的with_entities()方法选择这些字段。

以下代码查询所有用户的名字和年龄:

users = session.query(User.name, User.age).all()
排序

我们可以使用order_by()方法自定义查询结果的排序顺序。以下代码查询所有用户的名字,并按字母顺序排序:

users = session.query(User.name).order_by(User.name).all()
分组

我们可以使用group_by()方法将查询结果按特定字段分组。以下代码查询所有用户的名字,并按名字首字母分组:

users = session.query(User.name, func.count(User.name)).group_by(func.substr(User.name, 1, 1)).all()
使用子查询

我们可以使用子查询在查询中嵌入子查询。以下代码查询年龄大于平均年龄的所有用户:

from sqlalchemy import select
subquery = select([func.avg(User.age)]).scalar_subquery()
users = session.query(User).filter(User.age > subquery).all()
总结

本文介绍了如何使用SQLAlchemy ORM进行查询。我们学习了如何连接到数据库,创建会话,执行各种类型的查询。SQLAlchemy ORM提供了一种干净、简洁的SQL查询代码编写方式,是Python数据库编程中一种重要的选择。