数据库开发-Django ORM的单表查询
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.查询集
1>.查询集相关概述
查询会返回结果的集,它是django.db.models.query.QuerySet类型。 它是惰性求值,和SQLAlchemy一样。结果就是查询的集。 它是可迭代对象。 惰性求值:
创建查询集不会带来任何数据库的访问,直到调用方法使用数据时,才会访问数据库。在迭代、序列 化、if语句中都会立即求值。 缓存: 每一个查询集都包含一个缓存,来最小化对数据库的访问。 新建查询集,缓存为空。首次对查询集求值时,会发生数据库查询,Django会把查询的结果存在这个缓 存中,并返回请求的结果,接下来对查询集求值将使用缓存的结果。
2>.案例一(没有使用缓存,每次都要去查库,查了2次库)
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 import os 7 import django 8 9 #参考salary/wsgi.py文件 10 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'salary.settings') 11 django.setup(set_prefix=False) 12 13 #导入employee应用的models模块中定义的Employee类 14 from employee.models import Employee 15 16 #没有使用缓存,而是每次都要去查库,查了2次 17 [ emp.first_name for emp in Employee.objects.all()] 18 [ emp.first_name for emp in Employee.objects.all()]
(0.001) SELECT @@SQL_AUTO_IS_NULL; args=None (0.000) SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; args=None (0.001) SELECT `employees`.`emp_no`, `employees`.`birth_date`, `employees`.`first_name`, `employees`.`last_name`, `employees`.`gender`, `employees`.`hire_date` FROM `employees`; args=() (0.001) SELECT `employees`.`emp_no`, `employees`.`birth_date`, `employees`.`first_name`, `employees`.`last_name`, `employees`.`gender`, `employees`.`hire_date` FROM `employees`; args=()