六、模型层

一、配置测试脚本

1. 在某一个应用的test.py中加上下面代码,可在manage.py中复制一部分。

    import os
    
    
    if __name__ == "__main__":
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django1.settings")
    
        import django
        django.setup()


2. 新建任意py文件,写入上面代码。

二、queryset对象

1. 能用queryset方法链式操作
    
        res = models.Books.objects.filter(pk=1).filter()
    
2. 能用‘.queryset’查看结果内部对应的sql语句

三、单表操作之增、删、改

1. 创建数据

    a. create方法
    
        from datetime import date
        
        ctime = date.today()
        book_obj = models.Books.objects.create(title='红楼梦', publish_date=ctime)
    
        book_obj = models.Books.objects.create(title='三国演义',publish_date='2019-1-1')
    
    
    b. 利用对象的绑定方法
    
        book_obj = models.Books(title='西游记', price=200.00, publish_date='2000-1-2')
        book_obj.save()
        
2. 修改数据

    a. queryset方法
    
        models.Books.objects.filter(pk=1).update(price=111.00)
    
    b. 利用对象
        
        将数据所有字段重写一遍,不推荐使用
        
        book_obj = models.Books.objects.get(pk=1)
        book_obj.price = 222.00
        book_obj.save()

3. 删除数据

    a. queryset方法
    
        models.Books.objects.filter(pk=3).delete()
    
    b. save方法
    
        book_obj = models.Books.objects.get(pk=1)
        book_obj.delete()
        

四、单表查询数据的13条方法。

orm语句的查询默认都是惰性查询,只有在使用数据时才会执行。

1. all() 

    查询所有,返回queryset对象。

    res = models.Books.objects.all()
    print(res)

2. filter()

    筛选,相当于原生sql语句里的where。支持多个参数,参数之间and关系。返回queryset对象。
    
    res = models.Books.objects.filter(pk=1, title='三国演义')
    print(res)

3. get()

    筛选,获取对象本身,条件不存在报错,支持一个参数。

    res = models.Books.objects.get(pk=1)
    print(res)

4. first() 

    获取queryset中第一个数据对象
    
    res = models.Books.objects.filter(title='西游记').first()
    print(res.price)


5. last() 

    获取queryset中最后一个数据对象
    
    res = models.Books.objects.filter(title='西游记').last()
    print(res.price)


6. count()

    统计数据个数
    
    num = models.Books.objects.count()
    print(num)

7. values()

    获取数据对象中指定的字段值,返回queryset对象(列表套字典)
    
    res = models.Books.objects.values('title', 'price')
    print(res)

8. values_list()

    获取数据对象中指定的字段值,返回queryset对象(列表套元祖)

    res = models.Books.objects.values_list('title', 'price')
    print(res)
    
9. order_by()

    按照指定字段排序,默认升序,字段前加负号降序

    res1 = models.Books.objects.order_by('price')
    res2 = models.Books.objects.order_by('-price')
    print(res1, res2)
    

10. reverse()

    颠倒顺序,前提是对象已被排序
    
    res = models.Books.objects.order_by('price').reverse()
    print(res)

11. exclude()

    排除
    
    res = models.Books.objects.exclude(pk=2)
    print(res)
    
12. exist()

    判断查询结果是否有值,返回布尔值,没什么用,数据本身自带布尔值。

    res = models.Books.objects.filter(pk=2).exists()
    print(res)
    
13. distinct()

    去重,容易忽略主键。

    res = models.Books.objects.values('title', 'price').distinct()
    print(res)
    

五、单表查询的双下划线查询

1. __gt/__lt

    查询大于/小于某一个值的数据

    res = models.Books.objects.filter(price__gt=100)
    print(res)
    
2. __gte/__lte
    
    查询大于等于/小于等于某一个值的数据
    
    res = models.Books.objects.filter(price__lte=100)
    print(res)

3. __in

    查询价格等于100或200的数据

    res = models.Books.objects.filter(price__in=[100, 200])
    print(res)

4. __range

    查询价格在100到200之间的数据,顾头顾尾。

    res = models.Books.objects.filter(price__range=(100, 200))
    print(res)

5. __year

    查询出版年份是2019年的数据

    res = models.Books.objects.filter(publish_date__year='2019')
    print(res)

6. __month

    查询出版月份是1月的数据

    res = models.Books.objects.filter(publish_date__month='1')
    print(res)

7. __startswith/__endswith

    查询名称以‘三’开头/结尾的数据

    res = models.Books.objects.filter(title__startswith='三')
    print(res)

8. __contains/__icontains

    查询名称中包含‘a’字的数据,不忽略/忽略大小写。

    res = models.Books.objects.filter(title__contains='a')
    print(res)

你可能感兴趣的:(六、模型层)