我需要从db获取最后一条记录。我正在使用sqlalchemy。 目前,我这样做:
obj = ObjectRes.query.all()
return str(obj[-1].id)
但查询太重了。我怎样才能更好地获得最后的记录?
答案 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
被应用了两次并破坏了结果。
所有现有的 ORDER BY 设置都可以通过传递 None 来抑制
所以解决方案是:
match = db_session.query(Match).first()
last_record = match.records.order_by(None).order_by(Record.id.desc()).first()