Я пытаюсь сделать оптимизированный SQL-запрос, чтобы получить список объектов A, у которого есть список объектов B, у которого есть список объектов C и D и отношение многих ко многим с E
Я пытался решить проблему с агрегатными строками, но у меня возникают проблемы, когда нет объектов типа B или C или D.
Например, я пробовал этот запрос:
aa = A.alias()
query = (A.select(A, B, aa, C, D, E).join(B, peewee.JOIN_LEFT_OUTER).join(aa, peewee.JOIN_LEFT_OUTER).switch(B).join(C, peewee.JOIN_LEFT_OUTER).switch(B).join(D, peewee.JOIN.LEFT_OUTER).switch(B).join(E, peewee.JOIN_LEFT_OUTER))
Затем я дедуплицирую данные с aggregate_rows. Это работает, когда есть строки B и C и D, но когда их нет, я не получаю соответствующий объект A с пустым списком B или C или D.
Я также пытался использовать предварительную выборкуно когда я получаю доступ, AB peewee не запускает запрос (Хорошо), но, когда я получаю доступ к ABC, peewee запускает запрос (Плохо).
A_objects = peewee.prefetch(A,B,C,D,E)
Я потерян, я не знаючто я делаю не так.