Django中使用原生sql

来源:互联网 发布:雅克比矩阵满秩 编辑:程序博客网 时间:2024/06/03 23:38

使用原生sql的主要目的是解决一些很复杂的sql不能用ORM的方法写出的问题。


Django中几种写原生sql的方式

1.extra:结果集修改器,是吗一种提供额外查询参数的机制

>>>> Book.objects.filter(publisher__name = '清华大学出版社').extra(where = ['price > 10']) #查找清华大学
出版社中所有大于10元的书籍。
# 也可以使用下面的语句

>>> Book.objects.filter(publisher__name = '清华大学出版社', price__gt = 10) # 意思和上一种相同
还有其他的几种方式,不过这个不太常用,所以不多说了。

2.raw:执行原始sql并返回模型实例

# 查看数据表 blog_book 中的所有的对象。>>> b = Book.objects.raw('select * from blog_book') # raw方法返回的是RawQuerySet的对象,可迭代>>> for i in b:print(i.title)</span>
raw方法貌似只能用在查询的时候

3.直接执行自定义SQL(这种方法完全不依赖与model,前面两种方式还是要依赖于model)

其实就是用python操作数据库的方法。

如果SQL学的不错的话,强烈建立使用第三种方式来进行

from django.db import connection# 获得一个游标cursor对象cursor = connection.cursor()# 插入操作cursor.execute("insert into blog_author(name) values('韩寒')")# 更新操作cursor.execute("update blog_author set name = '郭敬明' where name = '韩寒' ")# 删除操作cursor.execute("delete from blog_author where name = '郭敬明'")# 查询操作cursor.execute('select * from blog_author')# 一条一条的取数据raw = cursor.fetchone()# 取出所有数据,以元组的形式返cursor.fetchall()


注意:在Django中,如果可以用orm解决的话,首选还是orm,不能解决的时候,再考虑使用原生SQL的方式。因为原生SQL就是为了弥补orm不能够很好的执行较为复杂的SQL命令。

0 0
原创粉丝点击