Python 项目中,使用 SQLAlchemy 时如何对数据进行求和?
直接使用 SQLAlchemy 的 scalar() 就可以进行求和计算了。
session.query(func.sum(Money.amount)).filter(.....).scalar()
在介绍下查询对象时常用到的其他几种方法,包括 .one(),.all(),.scalar(),.one_or_none(),.get(),.first()等。
▶ .one()
如果只能查询到一个结果,返回它,否则抛出异常。
没有结果时抛sqlalchemy.orm.exc.NoResultFound,有超过一个结果时抛sqlalchemy.orm.exc.MultipleResultsFound。
▶ .all()
返回查询到的所有的结果。
这个方法比较危险的地方是,如果数据量大且没有使用limit子句限制的话,所有的结果都会加载到内存中。
它返回的是一个列表,如果查询不到任何结果,返回的是空列表。
▶ .first()
返回查询到的第一个结果,如果没有查询到结果,返回None。
▶ .scalar()
这个方法与.one_or_none()的效果一样。
如果查询到很多结果,抛出sqlalchemy.orm.exc.MultipleResultsFound异常。
如果只有一个结果,返回它,没有结果返回None。
▶ .one_or_none()
比起.one()来,区别只是查询不到任何结果时不再抛出异常而是返回None。
▶ .get()
这是个比较特殊的方法。它用于根据主键来返回查询结果,因此它有个参数就是要查询的对象的主键。
如果没有该主键的结果返回None,否则返回这个结果。
我的笔记