在使用python ORM peewee在第一个表的一列上只选择了不同的值之后,我尝试连接第一个表(PageVisits)上的第二个表(PageLikes)。
在纯SQL中,我可以这样做:
SELECT DISTINCT(pagevisits.visitor_id), pagelikes.liked_item FROM pagevisits
INNER JOIN pagelikes on pagevisits.visitor_id = pagelikes.user_id
在peewee with python中,我尝试过:
query = (Page.select(
fn.Distinct(Pagevisits.visitor_id),
PageLikes.liked_item)
.join(PageLIkes)
这给了我一个错误:distinct() takes 1 positional argument but 2 were given
我可以并且已经在peewee中使用distinct的唯一方法是:
query = (Page.select(
Pagevisits.visitor_id,
PageLikes.liked_item)
.distinct()
这似乎不适用于我的场景。
那么,在我使用peewee连接另一个表之前,如何根据一列在一个表中只选择不同的值呢?
发布于 2020-04-04 08:12:49
我认为您不应该以这种方式使用fn.DISTINCT()
遇到错误。我很好奇能看到完整的回溯。在我的本地测试中,运行如下代码没有任何问题:
query = (PageVisits
.select(fn.DISTINCT(PageVisits.visitor_id), PageLikes.liked_item)
.join(PageLikes))
它生成的SQL等同于您想要的东西。我用的是最新的peewee code btw。
发布于 2020-04-03 16:59:49
正如Papooch所建议的,在模型上调用distinct似乎是可行的:
distinct_visitors = (Pagevisits
.select(
Pagevisits.visitor_id.distinct().alias("visitor")
)
.where(Pagevisits.page_id == "Some specifc page")
.alias('distinct_visitors')
)
query = (Pagelikes
.select(fn.Count(Pagelikes.liked_item),
)
.join(distinct_visitors, on=(distinct_visitors.c.visitor = Pagelikes.user_id))
.group_by(Pagelikes.liked_item)
)
https://stackoverflow.com/questions/60997944
复制相似问题