Django ORM数据查询方法,query查看内部封装sql语句


必知必会13条:ORM数据查询方法

准备环境:

id name age register_time
18 junjie 18 2004-01-01
19 nn 10 2004-01-01
20 tom 99 2022-03-02

方法:

方法 描述
all() 查询所有数据
filter() 带有过滤条件的查询
get() 直接拿到数据对象
但条件不存在直接报错
first() 拿queryset的第一个元素
values() 可指定获取的数据字段
values_list() 列表套元祖
distinct() 去重
order_by() 默认升序
order_by() order_by('—字段名') 降序
count() 统计当前数据个数
exclude() 展示指定数据之外的数据
exists() 数据本身就自带布尔值 返回的是布尔值

all():查询所有数据

res = models.User.objects.all()
print(res)
# 输出:>>junjie>, >>nn>, >>tom>]>

filter():带有过滤条件的查询

res = models.User.objects.filter(pk=20)
print(res)
# 输出:>>tom>]>

get():直接拿到数据对象,但条件不存在直接报错

res = models.User.objects.get(pk=20)
print(res)
# 输出:对象>>>tom

first():拿queryset的第一个元素

res = models.User.objects.all().first()
print(res)
# 输出:对象>>>junjie

values():可指定获取的数据字段, 结果列表套字典。

res = models.User.objects.values('name','age')
print(res)
# 输出:

values_list() :列表套元祖

res = models.User.objects.values_list('name')
print(res)
# 输出:

distinct():去重

注意:去重一定是要一模一样的数据,请忽略主键。

res = models.User.objects.values('name','age').distinct()
print(res)

order_by():升序

res = models.User.objects.order_by('age')
print(res)
# 输出:>>nn>, >>junjie>, >>tom>]>

order_by():降序

res = models.User.objects.order_by('-age')
print(res)
# 输出:>>tom>, >>junjie>, >>nn>]>

count():统计当前数据的个数

res = models.User.objects.count()
print(res) 
# 输出: 3

exclude():获取指定之外的数据

res = models.User.objects.exclude(name='junjie')
print(res)
# 输出:>>nn>, >>tom>]>

exists():数据本身就自带布尔值 返回的是布尔值

注意:数据存在返回Ture, 不存在返回Flase

res = models.User.objects.exclude(name='junjie').exists()
print(res)
# 输出: True

查看内部封装的sql语句,只有queryset对象才能够点击query查看内部的sql语句

res = models.User.objects.values_list('name')
print(res.query)
# 输出:SELECT `app01_user`.`name` FROM `app01_user`

直接查看内部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',
        },
    }
}