上篇带大家简单做了一下图书表的创建、简单的查看和删除,今天会先简单介绍添加和修改,因为添加和修改与删除一样都很简单,本篇会相对多介绍一点单表查询,大家都知道数据库中查询是最重要的一部分,毕竟无论是修改还是删除等很多操作都是建立在查数据的基础上。

本篇导航:

  • 添加
  • 单表查询
  • 修改

今天所有例子用的延续上篇的数据库,book表也是延续上篇,接着昨天的建表,删除等功能扩展其他功能,所以有所疑问的可以先看上篇随笔:

http://www.cnblogs.com/liluning/p/7729607.html

一、添加

1、添加表记录

1)方式一

book_obj = models.Book(nid=nid,title=title,author=author,publishDate=publishDate,price=price)
book_obj.save() # 将数据保存到数据库

2)方式二

#book_obj可以得到返回值
book_obj=models.Book.objects.create(title=title,author=author,publishDate=publishDate,price=price)

2、template模版

1)首页的添加按钮

<a href="/addBook/"><button class="btn btn-primary">添加书籍</button></a>

2)添加页面的提交表单

<form action="/add/" method="post"> {% csrf_token %} <tr> <td><input type="text" name="title"></td> <td><input type="text" name="author"></td> <td><input type="date" name="publishDate"></td> <td><input type="text" name="price"></td> <td> <button class="btn btn-info">提交</button> </td> </tr> </form>

{% csrf_token %}之前说过 安全机制 在post请求中使用

3、url 分发

url(r'^add/', views.addBook),

4、视图函数views

def addBook(request) :if request.method == "POST" : nid = request.POST.get("nid") title = request.POST.get("title") author = request.POST.get("author") publishDate = request.POST.get("publishDate") price = request.POST.get("price") # book_obj = models.Book(title=title,author=author,publishDate=publishDate,price=price) # book_obj.save() # 将数据保存到数据库 book_obj = models.Book.objects.create(title=title, author=author, publishDate=publishDate, price=price) return redirect("/index/") return render(request, "add.html")

先讲拿到表单提交的数据 然后添加到表

添加表用那一个方式都可以 推荐方式二


二、单表查询

1、查询相关API

一定区分object与querySet的区别

复制代码昨天已做介绍:
<1> all():
<2> filter():<3> get():
返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。(慎用)
<4> exclude():
它包含了与所给筛选条件不匹配的对象
<5> values():
返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列
<6> values_list():
它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
<7> order_by():     对查询结果排序
<8> reverse():
对查询结果反向排序
<9> distinct():           从返回结果中剔除重复纪录
<10> count():             返回数据库中匹配查询(QuerySet)的对象数量。
<11> first():
返回第一条记录
<12> last():
返回最后一条记录
<13> exists():
如果QuerySet包含数据,就返回True,否则返回False

例如: <2>filter(nid=nid,title=title) ','可以起到数据库and的作用两个条件关系为且,在括号里并不能实现‘或’的条件关系,后面的随笔会随后一一介绍。 

2、双下划线之单表查询

1 models.Tb1.objects.filter(id__lt=10, id__gt=1)    # 获取id大于1 且 小于10的值
#__lte,__gte   小于等于 大于等于
2 models.Tb1.objects.filter(id__in=[11, 22, 33])    # 获取id等于11、22、33的数据 3 models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in 4 models.Tb1.objects.filter(name__contains="ven") #模糊查询 5 models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感 6 models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and 7 startswith,istartswith, endswith, iendswith

3、通过logging可以查看翻译成的sql语句

LOGGING = {'version': 1,'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } } 

将上面代码粘贴到setting配置文件里,当你的操作与数据库相关时 会将我们的写的语句翻译成sql语句在服务端打印。

4、以下代码只为测试sql语句和单表查询示例

1)url 分发

url(r'^query/', views.query),

2)视图函数views

def query(request):# 查询方法API:# 1 all: models.表名.objects.all() # book_all = models.Book.objects.all() # 结果是querySet集合 [model对象,....] # print(book_all) # <QuerySet [<Book: Book object>, <Book: Book object>, <Book: Book object>]> # 2 filter: models.表名.objects.filter() # 结果是querySet集合 [model对象,....] # ret1=models.Book.objects.filter(author="yuan") # # <QuerySet [<Book: 追风筝的人>, <Book: asd>]> # ret2=models.Book.objects.filter(nid=1) # <QuerySet [<Book: yuan>]> # ret2=models.Book.objects.filter(author="yuan",price=123) # <QuerySet [<Book: yuan>]> # print(ret2) # 3 get models.表名.objects.get() # model对象 # ret3=models.Book.objects.get(author="yuan") # print(ret3.price) # exclude : 排除条件 # ret4=models.Book.objects.exclude(author="yuan") # print(ret4) # values方法 # ret=models.Book.objects.filter(author="yuan").values("title","price") # print(ret)# <QuerySet [{'title': '追风筝的人', 'price': Decimal('99.00')}, {'title': 'asd', 'price': Decimal('123.00')}]> # ret = models.Book.objects.filter(author="yuan").values_list("title", "price") # print(ret) # <QuerySet [('追风筝的人', Decimal('99.00')), ('asd', Decimal('123.00'))]> # ret=models.Book.objects.filter(author="yuan").values("author").distinct() # print(ret) # count方法 # ret=models.Book.objects.filter(author="yuan").count() # print(ret) # first 方法 ret = models.Book.objects.all().first() print(ret) # exists方法 # if models.Book.objects.all().exists(): # print("exists") # else: # print("nothing") # ret = models.Book.objects.filter(price__gt=100) # ret = models.Book.objects.filter(price__gte=99) # 大于等于 # ret=models.Book.objects.filter(publishDate__year=2017,publishDate__month=10) # ret=models.Book.objects.filter(author__startswith="张") # print(ret) return HttpResponse("OK")

以 first 方法为例

从此处可以看出我们虽然在操作数据库时没有写sql语句,但是django将我们写的语句翻译成了sql语句


三、修改

1、修改表记录

修改表记录和添加表记录同样都有两个方法,我们在视图函数views里看修改表记录的具体应用

nid = request.POST.get("nid")
title=request.POST.get("title") author=request.POST.get("author") publishDate=request.POST.get("publishDate") price=request.POST.get("price") # 修改方式1:save(效率低) # book_obj=models.Book.objects.filter(nid=id)[0] # 修改书名示例: # book_obj.title="py2" # book_obj.save() # 修改方式2:(推荐) models.Book.objects.filter(nid=nid).update(title=title,author=author,publishDate=publishDate,price=price) return redirect("/index/")

2、url 分发

url(r'^edit/(\d+)', views.editBook),

3、template模版

1)主页修改按钮

<a href="/edit/{{ book_obj.nid }}"><button class="btn btn-info">编辑</button></a>

2)数据来源和添加表数据相同 由template模版的form表单提交 不同的是修改的表单内需要默认原来的数据

<form action="/edit/{{ edit_obj.nid }}" method="post"> {% csrf_token %} <tr> <td>{{ forloop.counter}}<input type="hidden" name="nid" value="{{ edit_obj.nid }}"></td> <td><input type="text" name="title" value="{{ edit_obj.title }}"></td> <td><input type="text" name="author" value="{{ edit_obj.author }}"></td> <td><input type="date" name="publishDate" value="{{ edit_obj.publishDate|date:"Y-m-d" }}"></td> <td><input type="text" name="price" value="{{ edit_obj.price }}"></td> <td> <a href="/del/{{ edit_obj.nid }}"><input type="button" class="btn btn-danger" value="删除"></a> <button class="btn btn-success">保存</button> </td> </tr> </form>

转载于:https://www.cnblogs.com/52forjie/p/7825239.html

djang-模型层(model)--添加,查询,修改相关推荐

  1. thinkphp模型层Model、Logic、Service讲解

    thinkphp模型层Model.Logic.Service讲解 时间:2014-08-24 15:54:56   编辑:一切随缘   文章来源:php教程网 已阅读:771 次 js特效源码,就从这 ...

  2. 064.django之模型层单表查询

    文章目录 一.orm简介 (一) orm概述 (二) django中orm的使用 二.单表操作 (一) 创建表 1 创建模型 2 常用的字段.参数和元信息 3 settings配置信息 4 增加.删除 ...

  3. Django08-1:模型层(ORM)--聚合查询/分组查询/F与Q查询/开启事务/常用字段及参数/自定义字段/数据库查询优化

    聚合查询 单独使用时,用aggregate 1.只要是跟数据库相关的模块 基本都在django.db.models里面 如果没有应该在django.db里面 2. 聚合查询通常配合分组使用 from ...

  4. cmd命令窗口mysql查询表数据命令行_cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据)...

    一 查看数据库.表.数据字段.数据 1 首先配置环境变量 进入mysql  或者通过一键集成工具 打开mysql命令行  或者mysql 可视化工具 打开命令行 进入这样的界面   不同的机器操作不同 ...

  5. Django 之 模型层

    文章目录 模型层 单表查询 多表新增 多表修改 多表删除 绑定关系 多表查询 拓展:多对多表三种创建方式 F查询和Q查询 F查询 Q查询 事务 模型层 Django 模型是与数据库相关的,与数据库相关 ...

  6. day02-django模型层

    Djiango的Model模型介绍 1.模型是我们项目中的数据信息源,它包含着存储数据的必要字段和行为 2.通常,每个模型对应数据库中的一张表,每个属性对应一个字段 3.每个模型都是django.db ...

  7. Swift CoreAnimation ---- CALayer的呈现层和模型层

    前言 自己的语言能力有限,借鉴别人的文章理解并写下这篇文章. 参考链接:iOS CoreAnimation专题--原理篇(三) CALayer的模型层与展示层 - 知乎 使用Swift语言,深入CAL ...

  8. Django–模型层orm查询

    文章目录 Django–模型层orm查询 一.单表查询(增.删.改.查) 基本查询 下划线查询 二.外键字段(增.删.改.查) 一对多 多对多 三.多表查询 多表查询的方式 正反向的概念 基于对象的跨 ...

  9. Django 模型层(models) 复杂查询详解

    Django 模型层(models) 复杂查询详解 一般Django orm 和原生sql混合使用 1.测试文件 只单独测试django中的某一个py文件 不一定是tests.py 1.配置 在任意一 ...

最新文章

  1. CakePHP中文手册【翻译】-请求处理组件
  2. 第一篇博客,用以规划我的编程人生
  3. Sequence in the Pocket
  4. HTML+CSS的学习
  5. linux查看缓存的文件,linux – 如何查看缓冲和缓存的数据
  6. 新东方预计6个月亏损超8亿美元
  7. flask-user and flask-admin实现登录验证
  8. 如何在SharePointDesigner订制页面里判断用户权限
  9. php excel库,phpexcel类库下载
  10. 用计算机画经验频率曲线,第四节经验频率曲线经验频率曲线的绘制步骤收集水文资料,组成.ppt...
  11. 平房误差函数_平方误差函数(square error function)与平方损失函数(square loss function)...
  12. mysql 查看事件_Mysql中的事件
  13. envi5.3处理高分二号影像数据详细过程记录
  14. linux修改为英文环境、中文输入
  15. 从零搭建飞冰微前端项目《第三篇:搭建微应用》❤️
  16. 【C语言】输出斐波那契数列 1 1 2 3 5 8 13 21...(知识点:一维数组、规律分析)
  17. docker之制作镜像
  18. GameFramework框架——使用过程中遇到的问题
  19. RK3399 HDCP 2.2key
  20. vpwm的控制变频_变频器常用的10种控制方式

热门文章

  1. mysql 修改表结构提示 MySQL said: Table is read only
  2. Synchronized 天天用,实现原理你懂吗?
  3. Java 编译期与运行期,别傻傻分不清楚!
  4. 当Tomcat遇上Netty,我这一系列神操作,同事看了拍手叫绝
  5. Oracle JDK 和 OpenJDK 有什么区别?
  6. 从一个故障说说Java的三个BlockingQueue
  7. 中国SaaS死或生之六:逢场作戏or脚踏实地?
  8. 框架:SpringMVC的工作原理
  9. 【Python】青少年蓝桥杯_每日一题_2.21_3与质数的判断
  10. java 压缩多个文件_java实现一次性压缩多个文件到zip中的方法示例