zoukankan      html  css  js  c++  java
  • (17)模型层 -ORM之msql 单表的增、删、改、查 及其他操作

    单表操作-增、删、改、查

    ret=models.User.objects.filter(id=1)  #这里的结果是一个queryset对象

    ret=modles.User.Objects.filter(ud=1).first()   #这里查询的结果是一个User对象,User就是表

    新增记录

    第一种方式通过对象来插入

    urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^order/', views.order),
    url(r'^user/', views.user),
    url(r'^add_user/',views.add_user)
    ]

    models.py

    from django.db import models

    # Create your models here.

    #创建一个user表,其实就在orm中就是写一个类
    class User(models.Model): #这个类必须继承models.models.Model
    '''建表的字段'''
    # 这个固定写法,创建表中的id字典int类型,且自增,primary_key=True就是主键
    id = models.AutoField(primary_key=True)
    # 创建表中的name字段,类型CharField就是等于varchar,括号里的参数就是定义最长的长度
    name = models.CharField(max_length=32)
    # 创建表中的pwd字典,类型CharField就等于varchar,括号里的参数就是最大的长度,null=true就表示可以为空
    pwd = models.CharField(max_length=32,null=True)

    # 增加字段直接在这里写要增加的字段
    addr = models.CharField(max_length=64)

    # 在增加字段,后面值可以为空,则不会要求输入默认的字段,直接成功创建
    yy = models.CharField(max_length=64,null=True)

    # 括号里的参数default就是设定默认值,创建后自动传入设定的默认值
    zz = models.CharField(max_length=64,null=True,default='qqq')

    add_user.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>新增用户</title>
    </head>
    <body>
    {#method只要不写就是get请求#}
    <form action="" method="post">
    <p>用户名:<input type="text" name="name"></p>
    <p>密码:<input type="password" name= 'pwd'></p>
    <input type="submit" value="提交">
    </form>
    </body>
    </html>

    views.py

    from django.shortcuts import render,HttpResponse
    from app01 import models
    # Create your views here.

    def index(request):
    li = 1
    return render(request,'index.html',{'li':li})

    def order(request):
    return render(request,'order.html')

    def user(request):
    return render(request,'user.html')

    def add_user(request):
    if request.method == 'GET':
    return render(request,'add_user.html')
    elif request.method == 'POST':
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    # 这里取到了用户名和密码
    '''导入models,可以取得user的对象,通过对象来将前端的数据保存到数据库'''
    user = models.User(name=name,pwd=pwd) # 括号里的变量name和pwd是对应对象中的相同名称的变量,变量值的name和pwd是对应这里函数下的变量
    # 直接调用save方法,这个save方法就是models.Model中的,因为User对象继承了models.Model
    user.save()
    return HttpResponse('新增成功')

    第二种方式   这种是常用的方式

    通过表模型来插入,是一种固定的写法 

    views.py

    from django.shortcuts import render,HttpResponse
    from app01 import models
    # Create your views here.

    def index(request):
    li = 1
    return render(request,'index.html',{'li':li})

    def order(request):
    return render(request,'order.html')

    def user(request):
    return render(request,'user.html')

    def add_user(request):
    if request.method == 'GET':
    return render(request,'add_user.html')
    elif request.method == 'POST':
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    # 中间的User就是表的名字,这种事常用的写法,只需要一条命令即可
    user = models.User.objects.create(name=name,pwd=pwd)
    return HttpResponse('新增成功')
    # 查询操作
    # 这个就是查询语句,filter是过滤,用get会报错后面.可以有很多功能first、values等
    ret = models.User.objects.filter(name=name).values()
    print(ret)
    return HttpResponse(ret.get('id'))

    # 删除操作第一种方式
    #这里就是查询id=1的数据,delete方法就是直接删除查询到的所有数据
    ret = models.User.objects.filter(id=1).delete()
    '''这样写就是把查询出来的所有名字为lqz的数据全部删除了'''
    ret = models.User.objects.filter(name='lqz').delete()


    # 删除操作第二种方式,通过对象删除
    user = models.User.objects.filter(id=2).first #first就是把查询到的第一个拿出来
    # user就是一个对象
    print(user.name) #获取用户名
    print(user.pwd) #获取密码
    user.delete() #删除这个对象

    # 修改操作第一种方式
    # 修改id=3的人的名字为xxx
    #update把查到的所有数据都更新
    ret=models.User.objects.filter(id=3).update(name='xxx')
    # 有一个返回值,就是影响的行数,所以这里的ret就是一个数字

    # 修改操作的第二种方式,通过对象去修改
    ret=models.User.objects.filter(id=3).first()
    ret.name='xxx'
    ret.save()

    queryset对象的方法
    all  #结果拿到的是所有的数据
    ret=models.User.objects.all()    #这里的返回结果就是queryset对象

    filter(**kwargs) #可以传多个值
    ret=models.User.objects.filter(id=3,pwd='333')   #filter这种形式id=3,pwd='333'是and条件
    ret = models.User.objects.filter(**{'id':3,'pwd':'333'})   #以字典形式传的时候需要在前面加**

    get(**kwargs)   #和filter一样传多值
    ret=models.User.objects.get(id=3)   #返回值是user对象,如果是book对象,返回值就是book对象

    exclude(**kwargs)  #和filter一样传多值  、过滤查询的对象,除输入的条件外其他所有不匹配的数据全部查询出来
    ret=models.User.objects.exclude(id=3)

    order_by(*field)  #将查询出来的结果根据要求进行排序,查询的值支持多个值

    ret=models.User.objects.all().order_by('name')     #这个是正向排序

    ret=models.User.objects.all().order_by('-name')    #条件前加一个 - 这个是反向排序

    PS:并不是只能用在all后面,可以用在其他的查询方法后

    count():    #返回数据库中匹配查询(QuerySet)的对象数量

    ret=models.User.objects.filter(name='lqz').first().count()

    first()    #返回第一条记录

    last()   #返回最后一条记录

    exists()    #如果QuerySet包含数据,就返回True,否则返回

    ret=models.User.objects.filter(id=10).exists()

    values(*field):   #返回一个ValueQuerySet,一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

    ret=models.User.objects.all().values('name')    # 返回的是特殊的QuerySet对象,QuerySet[{'name':'xxxxxx',}]

    ret = models.User.objects.all().values('name','pwd').first()    #这个返回结果就是特殊对象的索引第一个位置的值,就是结果中的第一个值

    ret = models.User.objects.all().values('name', 'pwd')    #返回的是一个可迭代的字典序列 <QuerySet [{'name':'xxxx','pwd','9999},{'name':'lqz','pwd':'4456'}]>

    values_list(*field)    #它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

    ret = models.User.objects.all().values_list('name','pwd')    #这个返回结果就是一个元组 <QuerySet [('xxxxx','999),('lqz','3333')]>

    distinct()    #从返回结果中剔除重复纪录

    ret=models.User.objects.filter(name='lqz').distinct() 

    ret = models.User.objects.filter(name='lqz').values('name').distinct()    #后面values的值是去重的条件

  • 相关阅读:
    iframe自适应高度的多种方法
    jquery 限制上传文件的类型和大小
    20200303 pandas
    20200306 Linux基础
    20200305 VMware虚拟机安装及centOS
    20200310 CMDB基础设计
    20200407 算法与数据结构
    20200403 MongoDB操作以及pyMongo
    20200402 MongoDB安装及简介
    20200401 docker部署与mysql主从搭建django读写分离
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10517192.html
Copyright © 2011-2022 走看看