【发布时间】:2012-01-23 00:42:43
【问题描述】:
我需要从 db 获取最后一条记录。我正在使用 sqlalchemy。 目前,我正在这样做:
obj = ObjectRes.query.all()
return str(obj[-1].id)
但是查询太重了。我怎样才能更好地获得最后的记录?
【问题讨论】:
标签: python sqlalchemy flask
我需要从 db 获取最后一条记录。我正在使用 sqlalchemy。 目前,我正在这样做:
obj = ObjectRes.query.all()
return str(obj[-1].id)
但是查询太重了。我怎样才能更好地获得最后的记录?
【问题讨论】:
标签: python sqlalchemy flask
如果需要,不要忘记禁用现有的排序
就我而言,我有动态的有序关系:
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()
【讨论】:
有时很难重新表述简单的事情:
SELECT * FROM ObjectRes WHERE id IN (SELECT MAX(id) FROM ObjectRes)
但这对我有用:
session.query(ObjectRes).filter(ObjectRes.id == session.query(func.max(ObjectRes.id)))
【讨论】:
看看Query.first()。如果您在右栏中指定sort,则第一个将是您的最后一个。一个示例可能如下所示:
obj = session.query(ObjectRes).order_by(ObjectRes.id.desc()).first()
【讨论】:
ObjectRes.query.order_by('-id').first()
SAWarning: Can't resolve label reference '-id'; converting to text() (this warning may be suppressed after 10 occurrences)
Model.query.order_by(-Model.field_name).first() 来检索所需的对象
ORDER BY desc LIMIT 1 之类的东西?