PythonPeewee:如何在联接之前在一列上选择不同的值?

PythonPeewee:如何在联接之前在一列上选择不同的值?,python,mysql,peewee,Python,Mysql,Peewee,在使用python-ORM-peewee仅在第一个表的一列上选择不同的值之后,我尝试将第二个表PageLikes连接到第一个表pagevists 在纯SQL中,我可以做到这一点: 从PageVisitions中选择DistinctPageVisitions.visitor\u id、pagelikes.liked\u项目 PageVisitions.visitor\u id=pagelikes.user\u id上的内部连接pagelikes 在peewee with python中,我尝试过:

在使用python-ORM-peewee仅在第一个表的一列上选择不同的值之后,我尝试将第二个表PageLikes连接到第一个表pagevists

在纯SQL中,我可以做到这一点:

从PageVisitions中选择DistinctPageVisitions.visitor\u id、pagelikes.liked\u项目 PageVisitions.visitor\u id=pagelikes.user\u id上的内部连接pagelikes 在peewee with python中,我尝试过:

query=Page.select fn.distinctpagevisions.visitor\u id, PageLikes.liked\u项目 .joinPageLIkes 这给了我一个错误: distinct接受1个位置参数,但给出了2个

我唯一可以且曾经使用distinct与peewee的方法是:

query=Page.select pagevisions.visitor\u id, PageLikes.liked\u项目 不同的 这似乎不适用于我的场景

那么,在使用peewee连接另一个表之前,如何基于一列在一个表中只选择不同的值呢

正如建议的那样,在模型上调用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)
         )

我认为您不应该以这种方式使用fn.DISTINCT时遇到错误。我很想看到完整的回溯。在本地测试中,我在运行以下内容时没有问题:

query = (PageVisits
         .select(fn.DISTINCT(PageVisits.visitor_id), PageLikes.liked_item)
         .join(PageLikes))

它生成的SQL与您所追求的内容相当。顺便说一句,我使用的是最新的peewee代码。

您是否尝试过query=Page.select pagevisions.visitor\u id.distinct,PageLikes.liked\u项?这似乎将其转换为一个distinct语句,但会产生另一个错误:1064,您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在第1行“DISTINCT t3.visitor\u id FROM pagevisions AS t3 internal JOIN pagelikes AS”附近使用的正确语法,您想知道什么?你的查询对我来说没有意义-一个独特的用户id和一个任意喜欢的项目id是什么意思?对于一个页面或一些我想知道的页面:用户喜欢什么?我不想计算一个用户两次,以防该用户访问多个页面或多次访问一个页面。我建议回答那个问题。也许你可以验证一下?运行fn.distinctpagevisions.visitor\u id应该没有问题。你能分享完整的回溯吗?我可以在本地运行该w/o问题。