SQLAlchemy的查询操做Query

查询操做git

查询子句使用session.query()方法来获取Query查询对象。查询对象可以使用一些方法来对应一些查询子句,好比.order_by().limit().filter()等。github

查询对象有这么几种方法.one().all().scalar().one_or_none().get(),以及.first()等。
下面对这几个方法的用法及效果作简单解释。sql

  • all() 返回查询到的全部的结果。这个方法比较危险的地方是,若是数据量大且没有使用limit子句限制的话,全部的结果都会加载到内存中。它返回的是一个列表,若是查询不到任何结果,返回的是空列表。
  • first() 返回查询到的第一个结果,若是没有查询到结果,返回None
  • .scalar() 这个方法与.one_or_none()的效果同样。 若是查询到不少结果,抛出sqlalchemy.orm.exc.MultipleResultsFound异常。若是只有一个结果,返回它,没有结果返回None
  • one() 若是只能查询到一个结果,返回它,不然抛出异常。没有结果时抛sqlalchemy.orm.exc.NoResultFound,有超过一个结果时抛sqlalchemy.orm.exc.MultipleResultsFound
  • one_or_none()比起one()来,区别只是查询不到任何结果时再也不抛出异常而是返回None
  • get()这是个比较特殊的方法。它用于根据主键来返回查询结果,所以它有个参数就是要查询的对象的主键。若是没有该主键的结果返回None,不然返回这个结果。

 

# 查询全部的User对象
session.query(User).all()
# 查询按照主键升序排序后的第一个User对象
session.query(User).order_by(User.id.asc()).first()
# 查询指定user_id为主键的对象
session.query(User).get(user_id)
session.query(User).filter(User.id == user_id).scalar()
session.query(User).filter(User.id == user_id).one_or_none()
session.query(User).filter(User.id == user_id).one()    # 若是查询不到会抛出异常,前面三个查询不到只是返回None

 

参考:session

一、http://jzqt.github.io/2015/12/29/SQLAlchemy笔记/spa

相关文章
相关标签/搜索