学习笔记,仅供参考,有错必纠
文章目录
- 数据库的操作(CRUD操作)
- 查询数据
- all方法
- values方法
- values_list方法
- order_by方法
- filter方法
- get方法
- exclude方法
数据库的操作(CRUD操作)
查询数据
数据库的查询同样需要使用管理器对象,即通过 Entry.objects 管理器方法调用查询接口。
方法
说明
all()
查询全部记录,返回QuerySet查询对象
get()
查询符合条件的单一记录
filter()
查询符合条件的多条记录
exclude()
查询符合条件之外的全部记录
all方法
- 用法
- 等同的mysql语句
我们在Django shell中敲入如下命令:
In [5]: from bookstore import models...: books = models.Book.objects.all()
...: for book in books:
...: print("书名", book.title, '出版社:', book.pub)
...:
书名 Djangoweb开发实战 出版社: 清华大学出版社
书名 python 出版社: 机械工业出版社
书名 R 出版社: 人民邮电出版社
- 自定义默认字符串
在models.py中我们也可以自定义默认字符串:
class Book(models.Model):title = models.CharField("书名", max_length = 30)
pub = models.CharField("出版社名", max_length = 50,null = True)
def __str__(self):
string = "书名:%s, 出版社:%s" % (self.title, self.pub)
return string
更改过models.py文件后,记得进行迁移。
我们再次使用Django shell敲入如下命令:
In [1]: from bookstore import models...: books = models.Book.objects.all()
...: for book in books:
...: print(book)
...:
书名:Djangoweb开发实战, 出版社:清华大学出版社
书名:python, 出版社:机械工业出版社
书名:R, 出版社:人民邮电出版社
values方法
values方法会返回指定列,且查询结果用字典表示。
- 用法
- 等同的mysql语句
- 返回值(QuerySet容器对象)
QuerySet为查询结果容器,容器内存放着字典,每个字典代表一条数据,每一条数据的格式为:
{'列1': 值1, '列2': 值2}
- 示例
我们在Django shell下敲入如下代码:
In [2]: from bookstore import models...: books = models.Book.objects.values("title", "pub")
...: for book in books:
...: print("书名", book["title"], '出版社:', book['pub'])
...: print("book=", book)
...:
书名 Djangoweb开发实战 出版社: 清华大学出版社
book= {'title': 'Djangoweb开发实战', 'pub': '清华大学出版社'}
书名 python 出版社: 机械工业出版社
book= {'title': 'python', 'pub': '机械工业出版社'}
书名 R 出版社: 人民邮电出版社
book= {'title': 'R', 'pub': '人民邮电出版社'}
values_list方法
values_list方法会返回指定列,且查询结果用元祖表示。
- 用法
- 返回值(QuerySet容器对象)
查询出来的数据会被封装到元组中,再封装到查询集合QuerySet中。
- 示例
我们在Django shell下敲入如下代码:
In [3]: from bookstore import models...: books = models.Book.objects.values_list("title", "pub")
...: for book in books:
...: print("book=", book)
...:
book= ('Djangoweb开发实战', '清华大学出版社')
book= ('python', '机械工业出版社')
book= ('R', '人民邮电出版社')
order_by方法
利用order_by方法可以进行排序查询,与all()方法不同的是,它会用SQL 语句的ORDER BY 子句对查询结果进行排序。
- 用法
默认是按照升序排序,降序排序则需要在列前增加-负号
- 举个例子
我们在Django shell下敲入如下代码:
In [6]: from bookstore import models...: authors = models.Author.objects.order_by("age")
...: for author in authors:
...: print("姓名:", author.name, '年龄:', author.age)
...:
姓名: 小黄 年龄: 10
姓名: 山羊 年龄: 23
filter方法
filter方法可以根据条件查询多条记录。
- 用法
- 返回值QuerySet
查询结果返回值为QuerySet容器对象,容器内部存放Entry 实例。
- 举个例子
我们在Django shell下敲入如下代码:
In [7]: from bookstore import models...: books = models.Book.objects.filter(pub="机械工业出版社")
...: for book in books:
...: print("书名:", book.title)
...:
书名: python
get方法
利用get方法可以返回满足查询条件的唯一一条数据,
- 用法
- 返回值
Entry 对象
- 举个例子
如果我们的查询结果多于1条,则会报MultipleObjectsReturned异常
from bookstore import modelsauthor = models.Author.objects.get(age__range=(20,30))
报错信息:
MultipleObjectsReturned: get() returned more than one Author -- it returned 2!
如果没有查询结果,则抛出Model.DoesNotExist异常
from bookstore import modelsauthor = models.Author.objects.get(id=100)
报错信息:
DoesNotExist: Author matching query does not exist.
如果查询结果只有1条,则不会报错:
In [12]: from bookstore import models...: author = models.Author.objects.get(id=1)
...: print(author.name)
...:
山羊
exclude方法
exclude方法将返回不包含此条件的数据集
- 用法
- 举个例子
...: for book in books:
...: print(book)
...:
书名:python, 出版社:机械工业出版社
书名:R, 出版社:人民邮电出版社