DoesNotExist
异常。而当这两个方法的查询条件都能够匹配多条数据记录时,都会抛出MultipleObjectsReturned
异常。提示:这两个方法都只能返回一条数据。
#使用 Django shell Author.objects.create(name="Tom",email="456789@163.com") #添加 Tom 此时数据表有两个Tom Author.objects.get(name="Tom") #查询 name="Tom",就会报错 #报错信息如下 MultipleObjectsReturned: get() returned more than one Author -- it returned 2! #查询不存在数据 Author.objects.get(id=4) #报错信息如下: DoesNotExist:Traceback (most recent call last)
Author.objects.get_or_create(name="Xiaolong")#先查询是否存在若不存在则新建该实例对象 (<Author: 作家:Xiaolong>, True) #返回值是一个元组有两个元素元组中的第一个元素代表实例对象,第二个元素是布尔值,标识返回的实例对象是否是新创建的,其中 True 代表新建实例对象,False 代表原有实例对象。
查询结果为单实例的类似方法还有 first、last 等方法,用法与语法格式别无二致,在这里就不加赘述了。
MyModel.objects.raw('sql语句')
def BookName(request): books=Book.objects.raw("select * from index_book") #书写sql语句 return render(request,"index/allbook.html",locals())
{% for book in books %} <p>{{book.title}}</p> {% endfor %}最后配置路由,通过访问 127.0.0.1:8000/index/allbook/,可以得到所有书籍的 title。
authors=Author.objects.raw("select id from index_author where name= %s",['Tom']) ...: for author in authors: ...: print('%s:%s'%(author.id,author.name)) 2:Tom #返回结果raw 方法可以接受一个列表或字典类型的参数,并将 SQL 语句中的占位符替换,最终完成查询。
from django.db import connection
用创建 cursor 类的构造函数创建 cursor 对象,再使用 cursor 对象执行 SQL 语句。为确保能够在出现异常时释放 cursor 游标,通常使用 with 语句进行创建操,如下所示:from django.db import connection with connection.cursor() as cur: cur.execute('执行SQL语句')使用示例如下:
from django.db import connection with connection.cursor() as cur: #调用游标对象的execute方法,更新author的名字 cur.execute('update index_author set name="Jack" where id=3;') with connection.cursor() as cur: # 删除id为3的一条author记录 cur.execute('delete from index_author where id=3;')虽然 Django 提供了 raw SQL的查询方法以及 cursor 游标对象的使用,但是它们很少的被使用,应为这些方法都需要考虑不同数据库的不同特性。Django 官网建议我们尽量使用 ORM 模块来完成相关操作。
本文链接:http://task.lmcjl.com/news/14870.html