• python测试开发django-13.ORM操作数据库(增删改查)


    前言

    django的models模块里面可以新增一张表和字段,通常页面上的数据操作都来源于数据库的增删改查,django如何对msyql数据库增删改查操作呢?
    本篇详细讲解django操作mysql数据库

    新增数据

    接着前面数据库User表创建成功后,如果我们在页面上注册用户的话,就需要在User表新增一条数据
    比如,我们想在User表插入一组数据 user_name=yoyo5, psw=555555

    在urls.py同一目录(helloworld/helloworld/testdb.py)新建一个testdb.py脚本

    # helloworld/helloworld/testdb.py
    
    from django.http import HttpResponse
    from hello.models import User
    
    
    # 新增数据
    def add_user(request):
        test1 = User(user_name='yoyo5', 
                           psw="55555")
        test1.save()
        return HttpResponse("yoyo5用户创建成功!看去看看吧")
    

    urls.py新增url访问地址

    from django.conf.urls import url
    from django.urls import re_path, path
    from hello import views
    from . import  testdb
    
    urlpatterns = [
        # 新增用户
        url(r'^register$', testdb.add_user),
    
    ]
    

    浏览器输入http://localhost:8000/register,就会看到页面显示:yoyo5用户创建成功!看去看看吧
    查询数据库,会发现hello_user表新增了一个yoyo5的数据

    更新数据

    如果需要修改数据库的某个数据,比如我想把yoyo5用户的psw改成999999

    在urls.py同一目录(helloworld/helloworld/testdb.py)的testdb.py脚本,继续写个update_psw函数

    # helloworld/helloworld/testdb.py
    
    from django.http import HttpResponse
    from hello.models import User
    
    # 更新数据
    def update_psw(request):
        # 修改其中一个user_name='yoyo5'的字段,再save,相当于SQL中的UPDATE
        test2 = User.objects.get(user_name='yoyo5')
        test2.psw = '999999'
        test2.save()
    
        # 另外一种方式
        # Test.objects.filter(id=1).update(name='Google')
    
        # 修改所有的列
        # Test.objects.all().update(name='Google')
        return HttpResponse("<p>密码修改成功</p>")
    

    urls.py新增url访问地址

    from django.conf.urls import url
    from django.urls import re_path, path
    from . import testdb
    
    urlpatterns = [
        # 新增用户
        url(r'^register$', testdb.add_user),
        url(r'^update$', testdb.update_psw),
    
    ]
    

    浏览器输入http://localhost:8000/update,就会看到页面显示:密码修改成功
    查询数据库,会发现hello_user表yoyo5的psw对应的值修改了

    删除数据

    如果user表里面的某个用户数据不想要了,也可以删除数据

    # 删除数据
    def delete_user(request):
        # 删除user_name=yoyo1的数据
        test3 = User.objects.get(user_name='yoyo1')
        test3.delete()
    
        # 另外一种方式
        # Test.objects.filter(id=1).delete()
    
        # 删除所有数据
        # Test.objects.all().delete()
    
        return HttpResponse("<p>删除成功</p>")
    

    urls.py新增url访问地址

    from django.conf.urls import url
    from django.urls import re_path, path
    from . import testdb
    
    urlpatterns = [
        # 新增用户
        url(r'^register$', testdb.add_user),
        url(r'^update$', testdb.update_psw),
        url(r'^delete$', testdb.delete_user),
    ]
    

    浏览器输入http://localhost:8000/delete,就会看到页面显示:删除成功
    查询数据库,会发现hello_user表yoyo1对应的数据清除了
    备注:要是表里面没这个数据,会报错:User matching query does not exist.

    查询数据

    比如我要查询user表里面yoyo用户对应的mail的值
    在urls.py同一目录(helloworld/helloworld/testdb.py)的testdb.py脚本,继续写个update_psw函数

    # 查询数据
    def select_mail(request):
    
        # 方法1 可以查询单个结果直接获取mail值
        m = User.objects.get(user_name='yoyo').mail
    
        # 方法2 filter相当于SQL中的WHERE,可设置条件过滤结果
        # test4 = User.objects.filter(user_name='yoyo')
        
        # 查询结果是list,取下标后,获取mail字段的值
        # m = test4[0].mail
    
        return HttpResponse("<p>查询结果:%s</p>" % m)
    

    urls.py新增url访问地址

    from django.conf.urls import url
    from django.urls import re_path, path
    from . import testdb
    
    urlpatterns = [
        # 新增用户
        url(r'^register$', testdb.add_user),
        url(r'^update$', testdb.update_psw),
        url(r'^delete$', testdb.delete_user),
        url(r'^mail$', testdb.select_mail),
    ]
    

    浏览器输入http://localhost:8000/mail,就会看到页面显示:查询结果:283340479@qq.com

    关于查询

    • 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
      a = User.objects.all()

    • filter相当于SQL中的WHERE,可设置条件过滤结果
      b = User.objects.filter(id=1)

    • 获取单个对象
      c = User.objects.get(id=1)

    • 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
      d = User.objects.order_by('name')[0:2]

    • 查询结果排序
      e = User.objects.order_by("id")

    • 上面的方法可以连着使用
      f = User.objects.filter(name="runoob").order_by("id")

    django交流QQ群:779429633

  • 相关阅读:
    properties文件作用以及在哪些地方用
    UUID.randomUUID().toString() 的作用
    devops简介
    Redis数据库
    锁方面区别
    python如何操作git
    使用django实现websocket
    迁移与备份
    服务端主动给客户端推送消息
    使用vim登录root管理员用户显示su:鉴定故障
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/10333417.html
Copyright © 2020-2023  润新知