Django之orm对MysqL数据库的增删改查操作简介:

利用Django中orm来查找数据库中的数据,对数据库进行增、删、改、查:

增:新增数据

# 操作数据库user表新增记录

# 方式1:

user_obj = models.User.objects.create(name=username,password=password)

# 方式2:

user_obj = models.User(name=username,password=password)

user_obj.save()  # 对象调用save方法保存到数据库

查:user_list = models.User.objects.all()  # 获取user表所有的数据(QuerySet对象)

# 只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句

user_obj = models.User.objects.all().first()   #从上面所有数据的QuerySet对象中取出第一个用户对象

user_list = models.User.objects.filter(password=555)

# filter过滤,查找条件password=555的所有用户数据,返回结果user_list为QuerySet对象(装有查询到的全部用户数据对象的一

个容器)

user_obj = models.User.objects.filter(password=555).first()

# 取出刚才容器中的第一个用户数据对象。

Tips:除了用filter定位表记录的方法,还可以使用.get()方法:user_obj = models.User.objects.get(password='555')

这样查会报错:get() returned more than one User -- it returned 2!

原因:用get方法是直接获取单数据对象本身,报错的原因在于根据password='555'查询的数据是2个结果,那么就不是单个数据对象,

所以就报错了!

强调:用get方法查询条件不存在的时候会直接报错。

所以:不推荐使用get,推荐使用filter查询,就算条件不存在,会返回一个空的QuerySet对象

( )

这里引入一个小点:将查询到的的所有表记录传给html文件,进行页面渲染之后展现给用户。

templates文件夹内创建user_list.html文件:html>

Title

用户数据表

IDnamepassword

{% for user_obj in user_list %}

{{ user_obj.pk }}{{ user_obj.name }}{{ user_obj.password }}

{% endfor %}

创建一个展示用户数据的url路径:

my_Dproject/my_Dproject/urls.py中添加:url(r'^user_list/', views.user_list)

创建路径函数:

my_Dproject/app01/views.py中加函数:def user_list(request):

user_list = models.User.objects.all()

return render(request, 'user_list.html', {"user_list": user_list})

后面的字典还可以替换成locals(),代表函数内所有变量我当做参数传进前面的html文件中,进行动态页面渲染:return render(request, 'user_list.html', locals())

开启my_Dproject项目,在浏览器输入url:http://127.0.0.1:8000/user_list/

这就是刚才我们通过增的操作,创建的user表和表中的2条记录。

改:

首先需要明白一点:改是建立在已经查到的数据基础上修改对应字段值的,所以改的前提必须有一个查的过程:

锁定单个表记录,用filter:user_obj = models.User.objects.filter(id=edit_id).first()# 再次强调如果不加.first(),返回的结果是一个QuerySet对象,而

不是用户数据对象

改:

方式一:

models.User.objects.filter(id=edit_id).upadte(name='banana', password='666')

注意:方式一update修改的数据可能不是一条记录,有可能把查询到的多条记录的name和password的值全部改成banana和666,类似

于批量操作。

当然如果能确定filter对象的唯一性比如条件为primary_key的id那么查找的数据肯定是一条记录,这样也可看作单个记录修改。

方式二:

user_obj = models.User.objects.filter(id=edit_id).first()user_obj.name = 'banana'user_obj.name = '666'user_obj.save()

编辑对象获取方式:

我们在表记录修改的时候一般都是需要获取到该条表记录的主键id值,这样就能精确定位修改该条记录了。所以需要一些手段来传递id值:

编辑对象的id的获取方式

方式1:

利用input隐藏一个标签

方式2:

form表单中加入GET请求数据,在views函数方法中通过request.GET.get(edit_id)来获取需要修改的id。

(虽然请求方式是POST,但可以在标签内加入GET请求参数,在views函数中能够同时通过request.POST和request.GET方法拿到不同

的数据)

删:

删除和修改方法类似:

方法一:models.User.objects.filter(password='555').delete()  # 会将queryset所有的数据对象全部删除

方法二:user_obj = models.User.objects.filter(password='555').first()

user_obj.delete()

最后补充一张Web框架实现的最基础的流程图:

python增删改查的框架_简单的Django框架增删改查操作相关推荐

  1. python分布式框架_高性能分布式执行框架——Ray

    Ray是UC Berkeley RISELab新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能. Ray目前还处于实验室 ...

  2. 注解_案例_简单的测试框架

    * 案例:简单的测试框架 * 小结:     1. 以后大多数时候,我们会使用注解,而不是自定义注解     2. 注解给谁用?         1. 编译器         2. 给解析程序用    ...

  3. python django下载_简单了解django文件下载方式

    这篇文章主要介绍了简单了解django三种文件下载方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 推荐使用FileResponse,从源码中可以 ...

  4. 如何做一个基于python校园运动场地预约系统毕业设计毕设作品(Django框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于Python(Django框架)的网站开发属于B/S架构(即浏览器和服务器架构模式), ...

  5. 如何做一个基于python校园排课选课系统毕业设计毕设作品(Django框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于Python(Django框架)的网站开发属于B/S架构(即浏览器和服务器架构模式), ...

  6. 如何做一个基于python校园鲜花水果商城系统毕业设计毕设作品(Django框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于Python(Django框架)的网站开发属于B/S架构(即浏览器和服务器架构模式), ...

  7. 如何做一个基于python旅游景点景区售票系统毕业设计毕设作品(Django框架)

    分析架构 我们开发系统,常规有两个架构,一个BS架构(浏览器/服务器模式),一个CS(客户端/服务器端模式):基于Python(Django框架)的网站开发属于B/S架构(即浏览器和服务器架构模式), ...

  8. 苹果多开框架_苹果暴露通知框架的旅程以及如何使用它

    苹果多开框架 In early March the nonprofit association Novid20 was founded aiming to find and implement sol ...

  9. python自带的框架是什么_Python Django框架是什么?Python学习入门!

    众所周知,Python是一门简单易懂.语法清晰的编程语言,拥有各种各样的开发框架,大大减少了开发者不必要的重复性工作,提高了开发效率. 而提及Python框架,首先大家想到的就是Django框架,那么 ...

最新文章

  1. 华为天才少年榜单遭受嘲讽:感觉水平一般,有点哗众取宠!
  2. 目标检测--Feature Pyramid Networks for Object Detection
  3. java内存栅栏_内存屏障(Memory Barriers/Fences) - 并发编程中最基础的一项技术
  4. 两边放动物对战守城的游戏_集合啦!动物森友会定制周边;百战天虫 大混战发布...
  5. mysql5.5在linux下的集群,同步和配置优化
  6. Spring有几种事务处理方式?举例说明
  7. 约瑟夫问题的几种实现
  8. Atom飞行手册翻译: 3.1 ~ 3.2
  9. react-native 改变webview中字体颜色方式
  10. 矩池云上如何修改cudnn版本
  11. c语言实验数据类型体会,实验1-C语言开发环境使用和数据类型、运算符、表达式-实验总结与体会...
  12. mac电脑如何配置mysql环境变量
  13. 红色警戒2:尤里的复仇 中文绿色版
  14. Python自动回复微信好友新年祝福
  15. 计算机毕业设计Java珠宝首饰进销存管理系统(源码+系统+mysql数据库+Lw文档)
  16. 2020找工作更难了?做好这4方面,找到高薪好工作
  17. qq聊天纪录被删除应该如何恢复
  18. 世纪佳缘发布婚恋观报告 “90”后和高学历人群更焦虑
  19. (9)隐蔽通道重点知识复习笔记
  20. 错误1068:依赖服务或组无法启动

热门文章

  1. 基于K-Means聚类算法的主颜色提取
  2. iOS开发者知识普及,Swift 挑战 Objective-C,谁会笑到最后?...
  3. rabbitmq利用死信队列+TTL 实现延迟队列
  4. java.util.concurrent.Callable 接口 源码
  5. 利用json模块解析dict报错找不到attribute 'dumps'[python2.7]
  6. 编译GCC4.8.2
  7. linux运维第二讲
  8. 移动互联网时代之用户名和密码何去何从(1)
  9. .NET框架程序设计-.NET框架开发平台的体系架构概览(.NET程序本质)
  10. python转cython_Cython安装与使用入门