假设我有一个Author表和一个Post表,每个Author可以有多个Post。
现在,随着单SQLAlchemy的查询,我想我所有的活跃作者和最近发布的帖子为每个。
我一直在尝试通过获取子列表来加入作者的工作列表,使用子查询将结果分组在一起,如下所示:
subquery = DBSession.query(Author.id, func.max(Post.publish_date).label("publish_date")) \
.join(Post.author) \
.filter(Post.state == 'published') \
.filter(Author.state == 'active') \
.group_by(Author.id) \
.subquery()
query = DBSession.query(Post) \
.options(joinedload(Post.author)) \
.join(Post.author) \
.join(subquery, and_(Author.id == subquery.c.id,
Post.publish_date == subquery.c.publish_date))
但是,如果我有两个来自同一发布日期的Author帖子,而这些帖子是最新的Posts,则意味着我得到那个Author在我的结果列表中出现两次。虽然我可以使用第二个子查询来消除重复(使用func.max(Post.id)),但这似乎是一种非常错误的方式。有更好的方法来解决这个问题吗?
(再次,我正在寻找一个查询,所以我试图避免在Author表上查询,然后遍历并对结果中的每个Author进行Post查询。)
我将按以下方式进行操作:
LastPost = aliased(Post, name='last')
last_id = (
session.query(LastPost.id)
.filter(LastPost.author_id == Author.id)
.order_by(LastPost.publish_date.desc())
.order_by(LastPost.id.desc())
.limit(1)
.correlate(Author)
.as_scalar()
)
query = (
DBSession.query(Author, Post)
.outerjoin(Post, Post.id == last_id)
)
for author, last_post in query:
print(author, last_post)
如您所见,结果是atuple
对(Author, LastPost)
。如果只希望作者至少有一位,请
更改outerjoin
为。 另外,我不会预先加载任何关系,以免造成任何混乱。joinPost Author.post
问题内容: 我只想通过“ where子句”从数据库中选择(并返回)一个字段。代码是: 这将失败,并且回溯是: 如何选择并仅返回“ id”列?我也尝试了其他几种方法,但也失败了。是“ load_only”正确的选项吗? 问题答案: 一个对象接受实体查询作为位置参数,所以只是通过它: 返回第一个结果的第一个元素;如果未找到任何行,则返回None。它为多行引发异常。 表示仅应加载实体的给定基于列的属性,
问题内容: 我有一个表和一个表,对于每个有付款的用户,表中可能有多个关联的付款。我想选择所有有付款的用户,但只选择他们最近的付款。我正在尝试使用此SQL,但之前从未尝试过嵌套SQL语句,所以我想知道自己在做什么错。感谢帮助 问题答案: 您需要有一个子查询,以获取每个日期的最新日期。
在同一个表的操作上我需要从表中删除。JPA查询是 我得到了这个错误: 根原因org.hibernate.hql.ast.querySyntaxException:意外标记:(第1行附近,第109列[DELETE FROM com.bcits.bfm.model.electricityledgerEntity a中的a.elledgerId IN(SELECT P.elledgerId FROM(S
问题内容: 我是来自python背景的Golang的新手,所以尝试了解新的和不同的概念。我正在尝试创建相关字段,然后从数据库中选择它们。 楷模: 创建表和行并从数据库中选择 打印: 两个问题: 为什么我需要选择creditCard作为单独的变量而不是使用点符号? 我在公司上遇到错误,并且没有点符号或相关工作。我该如何取回? 问题答案: 根据文件,你需要设置以进行自动预加载工作。因此,将检索用户的行
问题内容: 嘿,我在PostgreSql中有2个表: 和一些数据: 文件: 更新: 因此,所有更新都指向同一文档,但是所有更新的日期都不同。 我想做的是从文档表中进行选择,但还要包括基于日期的最新更新。 这样的查询应如何显示?这是我目前拥有的,但我列出的是所有更新,而不是我需要的最新更新: 包括; 我在查询中需要这个的原因是我想按更新模板中的日期排序! 编辑:此脚本已大大简化,因此我应该能够创建一
我有一个关系N x 1,,post->user有如下关系: post.php(模型): 注意:我不希望在我的post.php模型文件中有任何“硬编码”的内容,因为在不同的情况下,我可能希望同一关系有不同的列,所以我希望将关系保留在上