参考django官方文档中执行查询模块进行实践操作整理的结果:https://docs.djangoproject.com/zh-hans/3.0/topics/db/queries/#falling-back-to-raw-sql
一、查看django操作数据库时执行的原生SQL语句
在项目settings中加上日志输入的如下配置:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }
控制台即可输出对应的SQL语句:
二、创建对象
创建对象的两种方式:save(),create()
save():要创建一个对象,用关键字参数初始化它,然后调用 save()
将其存入数据库
student = StudentModel(first_name='三',last_name='张',index=3) student.save()
create():要一步创建并保存一个对象,使用 create()
方法
通过日志打印结果来看,两种方式执行的是相同的SQL语句:
三、查询对象
特性:
1、all()方法返回所有对象
2、filter(**kwargs)
返回一个新的 QuerySet
,包含的对象满足给定查询参数。
3、exclude(**kwargs)
返回一个新的 QuerySet
,包含的对象 不 满足给定查询参数。
4、上述3个方法返回的均是一个queryset对象,可以进行链式查询:
student1 = StudentModel.objects.all()
student2 = student1.filter(index=3)
student3 = student2.exclude(last_name='张')
三个queryset对象相互独立,互不影响
5、queryset的惰性:创建queryset时不会触发数据库查询操作,只有在调用时才会触发查询比如打印、循环遍历:
6、get()返回结果只能有一条,没有符合条件的或者符合条件个数大于1的,会抛出异常;get()返回的结果是一个对象,不支持链式查询