Django中查询筛选数据时,大多数是使用封装好的orm,其中有一些较为复杂的sql语句很难使用orm实现,因此在此引入Django中原生sql的使用方法
在Django中使用原生Sql主要有以下三种方法:
一:extra:结果集修改器,一种提供额外查询参数的机制
二:raw:执行原始sql并返回模型实例
三:直接执行自定义Sql
举例说明使用方法
from django.db import models
class Book(models.Model):
name = models.CharField('书名')
price = models.IntegerField('价钱')
publish = models.CharField('出版社')
create_time = models.DateTimeField('上线日期')
1.extra:结果集修改器,是吗一种提供额外查询参数的机制
books= Book.objects.filter(publish='清华出版社').extra(where=['price>50'])
此方法适合用于orm难以实现的某个筛选条件,将这个条件单独选出,使用原生sql进行筛选。此方法也依然主要依靠与orm
2.raw:执行原始sql并返回模型实例
books = Book.objects.raw('select * from book where publish="清华出版社"')
此方法在执行完原生sql后,返回一个orm的实例
3.直接执行自定义Sql
from django.db import connection # django封装好的方法
cursor=connection.cursor() # 建立游标
cursor.execute("insert into book(name) values('小王子')") #插入操作
cursor.execute('update book set name='梦里花落知多少' where name='撒哈拉的故事'') #更新操作
cursor.execute('delete from book where name='小王子'') #删除操作
cursor.execute('select * from book') #查询操作
raw = cursor.fetchone() #读取一条
raw_list = cursor.fetchall() #读取所有,返回list
此方法是真正的完全抛弃orm,直接使用原生sql,django中也有封装好的connection方法使用,只要sql语句使用流畅,此方法也比较方便。