当model满足不了需求的时候(比如:存储过程、多表连接等),可以使用原生sql。django提供了两种方法使用原生的sql:你可以使用Manager.raw()执行原生sql,它会返回model实例,或者也可以直接执行原生sql,完全忽略model。警告:使用原生sql的时候,要尽可能的使用参数的形式以防止用户进行sql注入攻击。
Manager.raw()执行原生sql
使用raw()方法执行原生sql,返回model实例:Manager.raw(raw_query, params=None, translations=None)。
举个列子:
class Person(models.Model):
first_name = models.CharField(...)
last_name = models.CharField(...)
birth_date = models.DateField(...)
执行原生sql:
>>> for p in Person.objects.raw('SELECT * FRO