如何获得最后的记录

时间:2011-12-18 13:13:33

标签: python sqlalchemy flask

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

obj = ObjectRes.query.all()
return str(obj[-1].id)

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

3 个答案:

答案 0 :(得分:108)

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

obj = session.query(ObjectRes).order_by(ObjectRes.id.desc()).first()

答案 1 :(得分:2)

有时很难重新拟定简单的事情:

SELECT * FROM ObjectRes WHERE id IN (SELECT MAX(id) FROM ObjectRes)

但这对我有用:

session.query(ObjectRes).filter(ObjectRes.id == session.query(func.max(ObjectRes.id)))

答案 2 :(得分:0)

如果需要,不要忘记禁用现有的排序

就我而言,我有动态有序关系:

class Match:
  ...
  records = relationship("Record", backref="match", lazy="dynamic", order_by="Record.id")

当我尝试接受答案时,我得到了第一条记录,而不是最后一条,因为 ORDER BY 被应用了两次并破坏了结果。

根据documentation

<块引用>

所有现有的 ORDER BY 设置都可以通过传递 None 来抑制

所以解决方案是:

match = db_session.query(Match).first()
last_record = match.records.order_by(None).order_by(Record.id.desc()).first()