一、前言
今天来学习一下django的orm的增加,删除,修改和查询,虽然我们之前学过sqlaclmy的面向对象数据库的操作,但是django的orm有自己的一套,我们还是来学学django是如何操作的吧。
二、前提
2.1、urls的设置
说明:我们是通过一个请求,来操作这些动作的,所以我们先设置一个urls.py,当然这个是在某个app里面设置的,我们这边就设置为cmdb吧!
from django.urls import re_path,path
from app01 import views
urlpatterns = [
path('orm/',views.orm),
]
所以访问的路劲是:http://127.0.0.1/cmdb/orm
2.2、modles的设置
说明:首先我们应该在modles里面设置好你的表结构,然后再导入类模块
from django.db import models
# Create your models here.
class UserInfo(models.Model):
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
三、 ORM基本增删改查
3.1、增加
说明:增加数据
from app01 import models
def orm(request):
#第1种方法,推荐使用这种
models.UserInfo.objects.create(username='sbh',password='123')
#第2种方式
obj = models.UserInfo(username='shuaigaogao',password='456')
obj.save()
#第三种方式,在django2.0上没跑通,是第一种的基础上改进的
dic = {'username':'honggege','password':'6969'}
models.UserInfo.objects.create(**dic)
return HttpResponse("orm")
3.2、查询
说明:查询数据
from app01 import models
def orm(request):
#查询所有字段数据
result = models.UserInfo.objects.all()
#精确查询某个字段,比如:select usernname from app01_userinfo where username="shuaigaigai"
result = models.UserInfo.objects.only("username").filter(username="shuaigaogao")
#根据filter,查询过滤后数据
result = models.UserInfo.objects.filter(username='shuaigaogao')
#id>1
result = models.UserInfo.objects.filter(id__gt=1)
#id<1
result = models.UserInfo.objects.filter(id__lt=1)
#id>=1
result = models.UserInfo.objects.filter(id__gte=1)
#id<=1
result = models.UserInfo.objects.filter(id__lte=1)
#查询后,获取第一条数据
result = models.UserInfo.objects.filter(username='shuaigaogao').first()
print(result)
#输出
UserInfo object (2) 这一个对象,通过这个对象获取id,username,password
#查询后,获取第一条数据,但是如果这条数据不存在会报错
result = models.UserInfo.objects.get(username='shuaigaogao')
#filter满足两个条件的过滤
result = models.UserInfo.objects.filter(username='shuaigaogao',password="6969")
for row in result:
print(row.id,row.username,row.password)
print(result)
#输出
2 shuaigaogao 6969
]>
return HttpResponse("orm")
注意了:我们看到了result的返回值是QuerySet类型,这个类型是有django提供的。它是以列表的形式输出,然后里面的每一个元素,其实都是UserInfo的对象。这边的每一个对象里面包括了你这个UserInfo类表里面的所有属性,这边的属性有:id,username,password。通过orm的code,看看是转换什么sql语句的,这个需要用到obj.query功能,但是first不能用:
#精确查询某个字段
result = models.UserInfo.objects.only("username").filter(username="shuaigaogao")
print(result.query)
#输出
SELECT "app01_userinfo"."id", "app01_userinfo"."username" FROM "app01_userinfo" WHERE "app01_userinfo"."username" = shuaigaogao
#查询所有
result = models.UserInfo.objects.all()
print(result.query)
#输出
SELECT "app01_userinfo"."id", "app01_userinfo"."username", "app01_userinfo"."password" FROM "app01_userinfo"
#筛选条件查询
result = models.UserInfo.objects.filter(username="shuaigaogao")
print(result.query)
#输出
SELECT "app01_userinfo"."id", "app01_userinfo"."username" FROM "app01_userinfo" WHERE "app01_userinfo"."username" = shuaigaogao
3.3、删除
说明:删除数据
from app01 import models
def orm(request):
#删除所有数据
models.UserInfo.objects.all().delete()
#删除符合id=1条件的数据
models.UserInfo.objects.filter(id=1).delete()
#删除符合password=123 and username='sbh'条件的数据
models.UserInfo.objects.filter(password=123,username='sbh').delete()
return HttpResponse("orm")
3.4、更新
说明:更新数据
from app01 import models
def orm(request):
#更新所有数据
models.UserInfo.objects.all().update(password="6969")
#更新符合username="shuaigaogao"条件的数据
models.UserInfo.objects.filter(username="shuaigaogao").update(password="6868")
return HttpResponse("orm")
3.5、查询补充
from app01 import models
def orm(request):
#相当于not in就是不等于
models.UserInfo.objects.exclude(id=1)
#排序
models.UserInfo.objects.all().order_by('id')
#相当于between....and...
models.UserInfo.objects.filter(id__range=[1,2])
#相当于in
models.UserInfo.objects.filter(id__in=[1,2,3])
#切片
models.UserInfo.objects.all()[7:10]