django 使用原生sql

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语句使用流畅,此方法也比较方便。

猜你喜欢

转载自blog.csdn.net/Victor_Monkey/article/details/82144265
今日推荐