django 用orm的extra实现复杂sql

看如下代码:

select = {
    'read_flag': 'exists (select * from project_notice_read  where user_id = 1 and notice_id=project_notice.id) '
}
msg = ProjectNotice.objects.filter().extra(tables=['project_notice', 'project_notice_read'],
                                           select=select,
where = [
            'project_notice.project_id=1 and (project_notice.id in '
            '(select b.notice_id from project_notice_private b where'
            '  b.project_id=%s and b.role_id=2) or project_notice.is_public=1)',
        ],
params = (1,))

需求:获取项目公告,并附带是否阅读标志。
解释:
select用来增加不属于原表的字段,且返回值只能有一个。
如果select里面有参数,通过 select_params来赋值。
tables指定用到的表名。
where用来编写原生sql里面where后面的条件,参数用%s代替。
params用来赋值where里面的参数,防sql注入,类型为元组。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值