zoukankan      html  css  js  c++  java
  • 六、模型层

    一、配置测试脚本

    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)
  • 相关阅读:
    黑马程序员_使用Jquery实现AJAX功能
    BootStrap 推荐网站
    工具类
    ExtJS 模块案例(增删改查)
    sql server 经典语句。~转 (入门必看)
    sql 时间格式转换
    转载wuhuacong(伍华聪)的专栏 利用Aspose.Word控件实现Word文档的操作 (留作笔记)
    c#操作Word文件 导出数据到word文档 (table 书签方式)
    ExtJs之格式化(Ext.util.Format) ~转
    查询/修改XML里某个字段的值
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/12052216.html
Copyright © 2011-2022 走看看