Django里面ORM增删改查语法
前提注意:在做增删改查的时候,你的数据库必须迁移成功!
Django往数据库添加数据语法(两种)
第一种:
book=数据库表对象
book.对象里面的字段=(’******‘)
#添加完了之后
book.save()#将这些数据添加到数据中
图例:
数据库中:
第二种:
变量名=数据表对象.objects.creare(字段=’****‘,字段2=****)
图例
数据库中:
第三种(批量创建数据):
使用 django.db.models.query.QuerySet.bulk_create()批量创建对象。减少SQL查询次数
改进如下:
querysetlist=[]
for i in resultlist:
querysetlist.append(Account(name=i))
Account.objects.bulk_create(querysetlist)
Django修改数据库数据语法:
变量名=模型类名.objects.get(字段=值) #先从数据库中查找获取要修改的值
变量名.字段=’新的值‘ #这边就是将获取到的值进行修改
变量名.save()
图例:
数据库中的值:
Django删除数据库数据语法:
变量名=模型类名.objects.get(字段=‘值’) #从数据库中查找到数据
变量名.delete() #删除这条数据
图例:
(还没删除数据时候的数据库):
删除中。。。。
删除后数据库:
(没有ID 为 8 的数据了!)
Django查询数据库数据语法:
查询方法:基本查询 、 过滤查询
基本查询
基本查询分为3种:
get----->查询单一(一条数据),如果这条是数据库不存在会报错(DoseNotExist异常),如果存在多个一样的数据结果也会报错(MultipleObjectsReturned异常)
all----->查询多个数据
count--->查询到多个数据的总数量
get:
用法: 模型类名.objects.get(字段=”值“)
all:
用法: 模型类名.objects.all()
count:
用法: 模型类名.objects.count()
过滤查询(条件查询)
根据需要精确查找单个数据:
1、模型类.objects.filter(字段=“值”)
2、模型类.objects.get(字段=“值”)
3、模型类.objects.filter(字段__exact=“值") #__exact 是表示判等(精确查找)
代码(例子:查询id=1的英雄):
模糊查询:
模型类名.objects.filter(字段__contains="值") #__contains:是否包含。
#startswith、endswith:以指定值开头或结尾。
模型类名.objects.filter(字段__endswith="值") #endswith:结尾
模型类名.objects.filter(字段__startswith="值") #endswith:开头
代码举例:
1、(例子:查询英雄模型类中包含“猪”的英雄):
2、(例子:查询英雄模型类中开头包含“曹“的英雄):
3、(例子:查询英雄模型类中结尾包含“香”的英雄):
比较查询:
__gt #大于
__lt #小于
__gte #大于等于
__lte #小于等于
.exclude #不等于
代码举例:
(1、查询ID大于3的英雄):
(2、查询ID大于等于3的英雄):
(3、查询ID小于3的英雄):
(4、查询ID小于等于3的英雄):
(4、查询ID不等于3的所有英雄):
范围查询:
in:是否包含在范围内。
代码举例:
(1、查询ID为1、3、5的英雄)
(2、查询ID不在1、3、5的所有英雄)
日期查询:
year、month、day、week_day、hour、minute、second #对日期时间类型的属性进行运算。
代码举例:
(1、查询2014年发表的书):
(2、查询2014年后发表的书):
F对象
- 作用:实现属性之间 的比较
- 使用与导包
#导包
from django.db.models import F,Q
语法:f(属性名)
代码举例:
(1、书本阅读量小于等于评论量的书)
(2、阅读量小于等于2倍评论量)
Q对象
- 作用:实现mysql里的not and or(与 、或 、非)
- 使用符合:& | ~
代码举例:
(1、与 [&]:查询阅读量的书本大于20,并且书的ID必须大于1)(三种方法):
第一种:
第二种:
第三种:
(2、或[ | ]:查询阅读量大于20 或者编号小于1):
(3、非 [ ~ ]:查除了ID是3的所有英雄):
聚合函数:
导包:from django.db.models import Avg, Count, Sum, Max, Min #导了包才能使用
使用方法: 模型类名.objects.aggregate(参数(‘字段’)) #aggregate就是聚合函数
参数有:
Avg:平均值
Count:总个数
Sum:求和
Max:最大值
Min:最小值
代码举例:
(1、最大值:求评论量最多的书本):
(2、最小值:求借阅书本最少的书本):
(3、平均值:求所有评论量的平均值):
(4、求和:求所有评论量的总和):
(5、总量:求所有英雄总量):
第一种:
第二种:
排序:
用法:模型类名.objects.条件().order_by('字段')#.order_by就是排序
代码举例:
「数据库信息:」
(1、以阅读量正序排序所有书本(小到大)):
(2、以阅读量倒序排序所有书本(大到小))
一对多,多对一的查询
查询一对多数据时一对应多方的数据(根据一找多方数据):
使用方法:
查询一下多方所有数据
一的对象.多的模型类小写_set.all()
查询一下多方(条件)数据:
一的对象.多的模型类小写.条件
代码举例:
前提:一本书可以多个人英雄(所以书(book书表)和英雄(hero英雄表)是一对多的关系)
(1、从西游记这本书里面的所有英雄)「通过书找书里面所有英雄」:
查询多对一时多对应一的方数据(根据多方找一方的数据):
在多的一方有设计一个外键所以:直接使用外键(没有外键会报错找不到的)
代码举例:
(1、从英雄刘备里面找到这个书叫什么)「通过英雄找书本」:
关联过滤查询
查询一的模型 条件是对多的一方属性进行判断:
代码举例:
(1、查询英雄是孙尚香的书籍 「提示:条件如果需要关联模型的字段 那么 就使用 关联模型类小写__属性名__条件运算符 = ‘xxx’
」):
(2、查询图书 书的英雄描述包含 ‘发’):
查询多的模型 条件是对一的一方属性进行判断:
代码举例:
(1、查询西游记里所有有英雄 「提示:条件使用关联的模型类的字典 一模型类外键名__一模型类属性名__条件运算符 = 值
」)
(2、查询阅读量大于等于20的书的所有的英雄)
判断查询集是否为空
exists()方法 返回True有数据 False没有数据
代码举例:
(1、判断英雄模型类里面是否为空):