首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择" on“子句,python SQL Alchemy

选择" on“子句,python SQL Alchemy
EN

Stack Overflow用户
提问于 2019-02-07 17:11:46
回答 1查看 45关注 0票数 0

我们在一页上有一个图书列表,当你点击一本我们希望你重定向到最后一个版本的书。

  • 书籍不包含对版本的引用(也不可能有版本,还没有收到)
  • 每个版本都包含一个参考书籍。

我很难在SQLAlchemy中转换SQL请求:

代码语言:javascript
运行
复制
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中工作。

代码语言:javascript
运行
复制
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两次并得到一个错误.

EN

回答 1

Stack Overflow用户

发布于 2019-02-10 15:28:21

这看起来像一个相关的子查询,这可能有效:

代码语言:javascript
运行
复制
subquery = session.query(Version) \
                  .filter(Book.id == Version.book_id) \
                  .order_by(Version.id.desc()) \
                  .limit(1) \
                  .correlate(Book)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54578745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档