django查询相关的相关操作

参考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',
        },
    }
}
View Code

 控制台即可输出对应的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()返回的结果是一个对象,不支持链式查询

原文地址:https://www.cnblogs.com/Xiaojiangzi/p/13085009.html