Сортировка внешнего столбца приводит к разному количеству результатов в Sqlalchemy - PullRequest
1 голос
/ 25 октября 2019

У меня есть 4 таблицы, а именно:

user
vip
group
group_vip

Каждый пользователь принадлежит к нулю или нескольким группам.
Vip - это таблица, содержащая столбец user_id, который сопоставляет каждый vip.id с user.id.

group_vip является таблицей ассоциации:

group_vip = Table('group_vip', MetaData,
    Column('group_id', Integer, ForeignKey('group.id')),
    Column('vip_id', Integer, ForeignKey('user.id'))
)

В поле «Пользователь» группа связывается путем построения отношения:

vip_groups = relationship("Group", secondary=group_vip, back_populates="vips")

У меня тогда есть следующееquery:

query = db.session.query().\
    join(User, User.id == vip.user_id).\
    outerjoin(group_vip, group_vip.c.vip_id == vip.user_id).\
    outerjoin(Group, Group.id == group_vip.c.group_id).distinct()

query = query.order_by().all()

Из-за поведения по умолчанию sqlalchemy будет дедуплицировать записи на основе первичного ключа при выполнении базового SQL, возвращаемый результат должен иметь эффект group_by (vip.user_id) и поэтому возвращаетстолько уникальных строк, сколько в таблице vip.

Таким образом, этот запрос возвращает, скажем, 15 строк, что является количеством записей в Vip.

Однако, когда я сортируюзапрос с Group.name,

query = query.order_by(Group.name.desc()).all()

или

query = query.order_by(Group.name.asc()).all()

Возвращенное количество строк равно 12 и 10 соответственно. Почему итоговое число отличается от order_by для внешнего столбца?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...