2017-07-03 63 views
0

我有一个名为帖子Peewee访问一个一对多的属性后,加入

class Posts(BaseModel): 
    post_id= peewee.PrimaryKeyField() 
    content = CharField(null=True) 
    author = CharField(null=True) 

表和称为表喜欢

class Likes(BaseModel): 
    user_like_id = ForeignKeyField(User,to_field='uniqueid', db_column='user_like_id') 
    post_like_id = ForeignKeyField(Posts,to_field='post_id', db_column='post_like_id') 

    class Meta: 
     db_table='likes' 
     primary_key = CompositeKey("user_like_id","post_like_id") 

凡post_like_id指POST_ID。 我试图做一个单一的数据库调用,我可以得到10个帖子和所有这些帖子的喜欢,而不会为每个帖子发出数据库调用(迭代每个post_id并获得具有该ID的喜欢数)。

当我加入如下:

k = Posts.select().join(Likes,on=(Posts.post_id == Likes.post_like_id)).execute() 

我没有访问多少喜欢上了一个单一的岗位上做出了的方式。

+0

有一个叫FUNC的东西在这里可以使用。 搜索与peewee相当的with_entities。 –

回答

0

获取10个最喜欢的帖子,例如: (JOIN.LEFT_OUTER是需要包括具有零所喜欢的职位,仅供参考):

query = (Posts 
     .select(Post, fn.COUNT(Likes.id).alias('ct')) 
     .join(Likes, JOIN.LEFT_OUTER) 
     .group_by(Post) 
     .order_by(fn.COUNT(Likes.id).desc()) 
     .limit(10)) 
+0

我收到一个错误 '''ProgrammingError:缺少表“t3”的FROM子句项 LINE 1:SELECT“t1”。“post_id”,COUNT(“t3”。“id”)AS ct FROM“在运行此查询时发布“A ...''' 。另外,Post是为表的列指定一个变量? – Jim