我有这样的代码:
thing = thing.query.filter_by(id=thing_id).limit(1).all()[0]
在all()[0]
案例中, limit(1)
感觉有些混乱和多余。是否有更简洁(和/或最佳)的方式来实现这一目标?
答案 0 :(得分:5)
答案 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。