0

我想在 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)

但是,“if”被称为“WHERE”原因。我怎么解决这个问题?

感谢您的帮助。

4

1 回答 1

0

当前版本的 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
""")
于 2019-01-09T20:01:00.593 回答