Как добавить условие в «ON» причину «LEFT JOIN» в PonyORM - PullRequest
0 голосов
/ 09 января 2019

Я хочу выполнить следующий запрос в PonyORM.

SELECT af.AppFormID, af.AppFormTitle, ra.CreateGrant, ra.ReadGrant, ra.UpdateGrant, ra.DeleteGrant, ra.PrintGrant
FROM public.appforms as af left join public.roleaccesses as ra 
on af.appformid = ra.appformid and ra.roleid = 2

если вы видите последнюю часть кода, я добавил условие в причина «ON».

Я пытался написать следующий код на python.

query= orm.left_join((af.AppFormID, af.AppFormTitle, ra.CreateGrant, ra.ReadGrant, ra.UpdateGrant, ra.DeleteGrant, ra.PrintGrant) for af in AppForms for ra in af.RoleAccess if ra.RoleID.RoleID == id)

Но «если» известно как «ГДЕ» причина. Как я могу решить эту проблему?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 09 января 2019

Текущая версия PonyORM (0.7.6) не поддерживает дополнительные условия в предложении LEFT JOIN. Но я согласен, что это полезная функция.

Пожалуйста, добавьте новый выпуск здесь: https://github.com/ponyorm/pony/issues

Я не гарантирую, что это будет реализовано быстро, но в конечном итоге мы добавим его.

До этого вам нужно написать необработанный SQL-запрос:

role_id = 2

rows = db.select("""
    SELECT af.AppFormID, af.AppFormTitle,
           ra.CreateGrant, ra.ReadGrant,
           ra.UpdateGrant, ra.DeleteGrant, ra.PrintGrant
    FROM public.appforms as af
      LEFT JOIN public.roleaccesses as ra
        ON af.appformid = ra.appformid and ra.roleid = $role_id
""")
...