我们在一页上有一个图书列表,当你点击一本我们希望你重定向到最后一个版本的书。
我很难在SQLAlchemy中转换SQL请求:
SELECT book.id, book.name, version.id, version.preview_url
FROM books as book
LEFT OUTER JOIN versions as version
ON version.id = (
SELECT TOP 1 id
FROM versions
WHERE book_id = book.id
ORDER BY versions.id DESC
)我打印一个图书列表,当你点击一本书时,我希望你被重定向到最后一个版本,所以我需要每本书的最后一个版本id。SQL请求正在工作,但经过多次尝试后,无法使它在SQLAlchemy中工作。
subquery = session.query(Version)\
.filter(Book.id == Version.book_id)\
.order_by(Version.id.desc())\
.limit(1)\
.subquery()
query = session.query(Book)\
.join(Version, Version.id == subquery)\
.order_by(Book.id.desc())SQLAlchemy将一个FROM子句注入子查询:FROM Book, Version by它还将从主查询中注入FROM子句,因此我们将加载Book两次并得到一个错误.
发布于 2019-02-10 15:28:21
这看起来像一个相关的子查询,这可能有效:
subquery = session.query(Version) \
.filter(Book.id == Version.book_id) \
.order_by(Version.id.desc()) \
.limit(1) \
.correlate(Book)https://stackoverflow.com/questions/54578745
复制相似问题