PythonPeewee:如何在联接之前在一列上选择不同的值?
在使用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似乎是可行的: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中,我尝试过:
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问题。