如何获得最后的记录

dim*_*rik 53 python sqlalchemy flask

我需要从db获取最后一条记录.我正在使用sqlalchemy.目前,我这样做:

obj = ObjectRes.query.all()
return str(obj[-1].id)
Run Code Online (Sandbox Code Playgroud)

但它的查询太重了.我怎样才能更好地获得最后的记录?

mik*_*iku 121

看看Query.first().如果您在右栏中指定排序,则第一个将是您的最后一个.示例可能如下所示:

obj = session.query(ObjectRes).order_by(ObjectRes.id.desc()).first()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!`ObjectRes.query.order_by( ' - ID').第()` (31认同)
  • @dimazubrik我通过使用它来获得警告`SAWarning:无法解析标签引用'-id'; 转换为text()(此警告可能在10次出现后被抑制)` (4认同)
  • ^ 现在这已成为一个错误;我使用 Model.query.order_by(-Model.field_name).first() 来检索所需的对象 (4认同)
  • 这是否实际上返回查询的所有值,然后只弹出第一个值(即超级低效),或者它是否足够聪明,实际上可以在引擎盖下执行类似“ORDER BY desc LIMIT 1”之类的操作? (2认同)

小智 6

有时很难重新表述简单的事情:

SELECT * FROM ObjectRes WHERE id IN (SELECT MAX(id) FROM ObjectRes)
Run Code Online (Sandbox Code Playgroud)

但这对我有用:

session.query(ObjectRes).filter(ObjectRes.id == session.query(func.max(ObjectRes.id)))
Run Code Online (Sandbox Code Playgroud)