首页 > 解决方案 > Flask-SQLAlchemy 自定义顺序,在同一个表上具有多个连接

问题描述

我有以下模型关系和定义:

我想查询帖子上的所有点赞,并按帖子点赞的用户关系类型对它们进行排序。非常类似于 Instagram 的“点赞”功能。

这是我所做的 sqlalchemy 查询。它没有给我我正在寻找的结果:

    def get_liked_by(self):
        relationship_l = aliased(Relationship)
        relationship_r = aliased(Relationship)

        post_likes = (
            self._post.likes.filter(
                PostLike.user.has(
                    or_(
                        User.received_relationships.any(
                            and_(
                                relationship_l.from_user == self._current_user,
                                relationship_l.confirmed == True,
                            )
                        ),
                        User.requested_relationships.any(
                            and_(
                                relationship_r.to_user == self._current_user,
                                relationship_r.confirmed == True,
                            )
                        ),
                    )
                )
            )
            .join(relationship_l, User.received_relationships)
            .join(relationship_r, User.requested_relationships)
            .order_by(
                case(
                    value=relationship_l.type,  # I want both directions to be applied
                    whens={
                        RelationshipType.romantic.value: 1,
                        RelationshipType.friend.value: 2,
                        RelationshipType.family.value: 3,
                        RelationshipType.acquaintance.value: 4,
                        RelationshipType.professional.value: 5,
                    },
                )
            )
            .limit(3)
            .all()
        )

以下是我正在努力解决的问题,需要解决方案:

  1. 此查询有效,但返回 0 个结果。一旦我添加连接,结果就会消失
  2. 目前,case仅由 订购received_relationships。如何将其更改为双向订购?

标签: pythonflasksqlalchemyflask-sqlalchemy

解决方案


推荐阅读