📅  最后修改于: 2023-12-03 15:35:06.906000             🧑  作者: Mango
SQLAlchemy是一个Python SQL工具包和ORM框架,它具有强大的SQL查询功能。SQLAlchemy ORM是SQLAlchemy的ORM模块,它提供了一种基于Python对象的SQL查询语言,使数据库访问变得更加简单和直观。
在本文中,我们将介绍如何使用SQLAlchemy ORM进行查询。
首先,我们需要连接到数据库。使用SQLAlchemy ORM连接到数据库有两种方法:
create_engine()
函数创建一个引擎,并通过该引擎连接到数据库。from sqlalchemy import create_engine
engine = create_engine('postgresql://user:password@host:port/dbname')
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_()
方法查询满足特定条件的记录。以下代码查询所有名字以'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数据库编程中一种重要的选择。