如何调用限制为1的SQLAlchemy查询?

时间:2016-05-10 18:16:28

标签: python sqlalchemy

我有这样的代码:

thing = thing.query.filter_by(id=thing_id).limit(1).all()[0]
all()[0]案例中,

limit(1)感觉有些混乱和多余。是否有更简洁(和/或最佳)的方式来实现这一目标?

4 个答案:

答案 0 :(得分:5)

first()

  

first()应用限制为1并将第一个结果作为标量返回

因此:

thing = thing.query.filter_by(id=thing_id).first()

答案 1 :(得分:5)

Jwodder的回答确实会将第一个结果作为标量返回,但SQLAlchemy提供了一些其他功能可能更适合您的需求,因此我列出并解释了所有这些功能:

first()将返回返回的第一行,如果没有返回行,则为None

one()将拉出1行,但它必须只拉一行:如果查询返回的行数不是1,则会出错。

one_or_none()基本上会执行one(),但如果没有返回任何行,则错误输出将返回None。如果返回多行,这仍然会出错。

所有这些文档可在此处找到:http://docs.sqlalchemy.org/en/latest/orm/query.html

答案 2 :(得分:2)

首先,同意并支持其他答案。

但是,您的查询似乎适用于primary key列。如果是这种情况,那么进行此类查询的最简单方法就是简单地调用get()

thing = Thing.query.get(thing_id)

答案 3 :(得分:0)

SQLAlchemy 核心为查询提供 .limit(1) operator