django模型方法extra

Posted songbird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django模型方法extra相关的知识,希望对你有一定的参考价值。

## select提供简单数据
# SELECT age, (age > 18) as is_adult FROM myapp_person;
Person.objects.all().extra(select={is_adult: "age > 18"})

## where提供查询条件
# SELECT * FROM myapp_person WHERE first||last ILIKE ‘jeffrey%‘;
Person.objects.all().extra(where=["first||last ILIKE ‘jeffrey%‘"])

## table连接其它表
# SELECT * FROM myapp_book, myapp_person WHERE last = author_last
Book.objects.all().extra(table=[myapp_person], where=[last = author_last])

## params添参数
# !! 错误的方式 !!
first_name = Joe  # 如果first_name中有SQL特定字符就会出现漏洞
Person.objects.all().extra(where=["first = ‘%s‘" % first_name])
# 正确方式
Person.objects.all().extra(where=["first = ‘%s‘"], params=[first_name])

 extra源码

def extra(self, select=None, where=None, params=None, tables=None,
              order_by=None, select_params=None):
        """
        Adds extra SQL fragments to the query.
        """
        assert self.query.can_filter(),                 "Cannot change a query once a slice has been taken"
        clone = self._clone()
        clone.query.add_extra(select, select_params, where, params, tables, order_by)
        return clone

 

以上是关于django模型方法extra的主要内容,如果未能解决你的问题,请参考以下文章

django 1.5 管理员内联额外

python测试开发django-78.ORM查询之extra

11.Django数据库操作(执行原生SQL)

model进阶(queryset,中介模型,查询优化,extra)

使用BroadcastReciever传递Intent.EXTRAS

Django查漏补缺