查询操作

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

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

  • 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

参考:

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

SQLAlchemy的查询操作Query的更多相关文章

  1. sqlalchemy数据库分层操作

    在学习sqlalchemy操作中,最常见的就是如下的示例,一个文件基本上包含了数据库的增删改查.sqlalchemy的具体操作我就不再详细说明了.流程大概是: 定义表 创建数据库引擎 创建表 插入数据 ...

  2. SQLAlchemy多表操作

    目录 SQLAlchemy多表操作 一对多 数据准备 具体操作 多对多 数据准备 操作 其它 SQLAlchemy多表操作 一对多 数据准备 models.py from sqlalchemy.ext ...

  3. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

  4. InfluxDB学习之InfluxDB的HTTP API查询操作

    在 InfluxDB学习 的上一篇文章:InfluxDB学习之InfluxDB的HTTP API写入操作 中,我们介绍了使用InfluxDB的HTTP API进行数据写入操作的过程,本文我们再来介绍下 ...

  5. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

  6. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

  7. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. [转载]MongoDB学习 (五):查询操作符(Query Operators).1st

    本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html   欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 查询操作符(Quer ...

  9. MongoDB源码分析——mongod数据查询操作

    源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. ...

随机推荐

  1. 自己做一款简易的chrome扩展--清除页面广告

    大家肯定有这样的经历,浏览网页的时候,左右两端广告,诸如“屠龙宝刀,点击就送”,以及最近火的不行的林子聪37传奇霸业什么“霸业面具,霸业吊坠”的魔性广告总是充斥我们的眼球. 当然有现成的扩展程序或者插 ...

  2. 基于JQuery的WEB套打设计器jatoolsPrinter1.0

    开发web套打应用时,如快递单打印,一般要经过以下步骤:1. 扫描快递单据,保存成一个图片文件2. 将底图作成<img>3. 在<img>上放置打印项,试着打印到打印机,观察有 ...

  3. [python工具][2]sublime的快捷键

    十.Sublime Text 快捷键列表 快捷键按类型分列如下: 1.通用  ↑↓← →    上下左右移动光标 Alt    调出菜单 Ctrl + Shift + P    调出命令板(Comma ...

  4. Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined)

    我真的是太菜了 A. Perfect Squares time limit per test 1 second memory limit per test 256 megabytes input st ...

  5. 【Luogu】P1411树(树形高精DP)

    题目链接 我貌似又做了一道高精题呢(笑) 这题的DP方程很好想,设f[i][j]表示i为根的子树,i所在联通块大小为j的最大值,然后乱搞 但是要高精,那么搞是得要高精除的 所以考虑f[i][j]是除以 ...

  6. UVa——400Unix ls(字典序文本处理输出iomanip)

    Unix ls Time Limit:                                                        3000MS                    ...

  7. hdu5852 Intersection is not allowed! 【矩阵行列式】

    题意 给出\(n*n\)网格\((n<=10^5)\) 顶部有\(K\)个起点,底部有\(K\)个相对应的终点 每次只能向下或向右走 求有多少种从各个起点出发到达对应终点且路径不相交的路径? 对 ...

  8. JavaScript阻止冒泡和取消事件默认行为

    //功能:停止事件冒泡 function stopBubble(e) { if ( e && e.stopPropagation ) { e.stopPropagation(); } ...

  9. cssText批量修改样式

    cssText所有浏览器都支持. cssText 的使用 obj.style.cssText = " width:200px;position:absolute;left:100px;&qu ...

  10. js对象的扁平化与反扁平化

    Object.flatten = function(obj){ var result = {}; function recurse(src, prop) { var toString = Object ...