1. Django 模型
1.Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。
2.Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。
3.Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统数据之间的转换。
ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
ORM 解析过程:
1、ORM 会将 Python 代码转成为 SQL 语句。
2、SQL 语句通过 pymysql 传送到数据库服务端。
3、在数据库中执行 SQL 语句并将结果返回。
from testapp.models import * # 导入model模块
2、Django model 常用操作
2.1 查询
Django Model 查询返回的结果分为具体值类型和QuerySet 类型
2.1.1 查询一条数据(get)
(1) 根据列col01 和 col02 来确定唯一的一条记录
my_simple_data1 = myTable01.objects.get(col01='co11_check', col02='co11_check')
(2) 根据列col01 和 col02 来确定唯一的一条记录中的所有值
my_simple_data2 = myTable01.objects.all().values().get(col01='co11_check', col02='co11_check')# QuerySet 类型
(3) 根据列col01 和 col02 来确定唯一的一条记录中的列col03的值
my_simple_data3 = myTable01.objects.get(col01='co11_check', col02='co11_check').col03
(4) 根据列col01 和 col02 来确定唯一的一条记录中的列col03 和 col04的值
my_simple_data4 = myTable01.objects.all().values('col03','col04').get(col01='co11_check', col02='co11_check')# QuerySet 类型
2.1.2 查询多条数据
1.基础查询
(1) 取出表1中所有数据
my_multi_data1 = myTable01.objects.all().values()# QuerySet 类型
filter() 等函式中关键字参数彼此之间都是 “AND” 关系,如果想要OR 连接多个条件查询,可以引入Q对象
from django.db.models import Q
(2) 取出表1中col01=‘123’ 和 col02=‘456’ 的数据
my_multi_data2 = myTable01.objects.all().values().filter(col01='123', col02='456')
或
my_multi_data2 = myTable01.objects.all().values().filter(Q(col01='123')&Q(col02='456'))# QuerySet 类型
(3) 取出表1中col01=‘123’ 或 col02=‘456’ 的数据
my_multi_data3 = myTable01.objects.all().values().filter(Q(col01='123')|Q(col02='456'))# QuerySet 类型
2.比较查询
格式意义colname__gt大于colname__gte大于等于colname__lt小于colname__lte小于等于
(4) 取出表1中col01不等于’123’ 的数据
my_multi_data4 = myTable01.objects.all().values().filter(~Q(col01='123'))
或
my_multi_data4 = myTable01.objects.all().values().exclude(col01='123')# QuerySet 类型
两个字段值比较:
F对象主要用于模型类的 A 字段属性与 B 字段属性两者的比较,即操作数据库中某一列的值。通常是对数据库中的字段值在不获取的情况下进行操作。F 对象内置在数据包django.db.models中,所以使用时需要提前导入。如下所示:
from django.db.models import F
(1)对数据库中两个字段的值进行比较(col01>col02)
my_multi_data4 = myTable01.objects.filter(col01__gt=F('col02'))
(2)两个数据库值联合查询:myTable01.col02==myTable02.col02 时取数据
my_multi_data4 = myTable01.objects.filter(col02=F('myTable02__col02'))
3.范围查询
(5) 查询col01为‘123’时,col02 取值在[‘001’, ‘002’,‘003’] 的数据
my_multi_data5 = myTable01.objects.all().filter(col01='123').filter(col02__in=['001','002','003'])# QuerySet 类型
(6) 查询col01为‘123’时,col02 取值不在[‘001’, ‘002’,‘003’] 的数据
my_multi_data6 = myTable01.objects.all().filter(col01='123').exclude(col02__in=['001','002','003'])# QuerySet 类型
4.聚合查询
(1) 查询结果按col01的值排序和反向排序
my_multi_data7 =myTable01.objects.all().values().order_by('col01')
my_multi_data7 =myTable01.objects.all().values().order_by('col01').reverse()# QuerySet 类型
(2) 数据去重
my_multi_data8 =myTable01.objects.all().values().distinct()# QuerySet 类型
(3) 取第一条/最后一条数据
my_multi_data9 =myTable01.objects.all().values().last()
my_multi_data9 =myTable01.objects.all().values().first()# QuerySet 类型
(4)计数
my_multi_data10 =myTable01.objects.all().values().count()
版权归原作者 蘑菇ding 所有, 如有侵权,请联系我们删除。