Django 自学笔记兼学习教程第5章第1节——基础增删查改

点击查看教程总目录

第四章介绍了模型类models.Model和创建模型,相当于介绍了数据库表和如何创建数据库表。

这一章将介绍如何使用模型对数据库表进行增删查改,

注意:修改了模型类models.Model后一定要更新数据库(详见第四章第一节第三部分),如果数据库表进行增删查改则不必。

0 - 超实用工具介绍——Django下的交互式命令行

Django项目中,如果在项目实际使用的代码中,通过增删查改实现对应的业务逻辑,

测试起来会比较麻烦,(往往需要运行项目,按照一定的业务逻辑去重复性的手动测试),这种情况下,使用代码进行测试是一种更好的选择。

所以我们需要一个场景,可以直接运行代码,以方便我们测试业务代码逻辑本身是否正确。

这个时候,python的交互式命令行,就是一个十分有用的工具了,

但是导入项目本身依赖的配置和文件则有点麻烦,而Django本身则提供了一个方法解决这个问题。

在项目所在文件夹下打开命令行窗口,运行

python manage.py shell

即可开启导入了项目设置的命令行窗口,这时要使用项目中的某一代码文件中的代码,则像项目中编写代码那样正常导入即可。

示例效果如下

F:\my_projects\demo2>python manage.py shell
Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from myapp import models
>>>

1 - 增(Create)——添加数据

myapp/models.py如下:

from django.db import models

class Person(models.Model):
gender = (
('male', '男'),
('female', '女'),
) name = models.CharField(max_length=60)
sex = models.CharField(max_length=32, choices=gender, default='男')
age = models.IntegerField()

要在数据库中增加记录,在Django下的交互式命令行执行代码如下

>>> from myapp.models import Person
>>> person = Person(name="Big Shuang", sex="male", age=24)
>>> person.save()

即可在数据库表中成功添加一行记录,如下

id name sex age
1 Big Shuang male 24

然后我们看下执行的代码,其实主要就是后两行

第二行创建一个 Person 实例,这个时候只是在程序中有了,但是数据库中还没有

第三行对该实例调用save方法,才会存储数据到数据库中。

2 - 查(Select)——查找数据

查找是个很复杂功能,这里只介绍一点基础的方法,详细的会在本章下一节展开讲讲。

  • 使用Model.objects.get(id=...),通过id查询Model表数据,其中Model是对应的模型名,该方法返回一个实例对象,查询不到会报错。

    示例如下(承接上文命令行中代码)
>>> p = Person.objects.get(id=1)
>>> p
<Person: Person object (1)>
>>> p.name
'Big Shuang'
>>> p.sex
'male'
>>> p.age
24
  • 使用Model.objects.all()获取Model表所有数据,

    其中Model是对应的模型名,该方法返回一个QuerySet对象,该对象也会在下一节展开讲。

    QuerySet对象可使用遍历和切片操作。

    示例如下(承接上文命令行中代码)
>>> persons = Person.objects.all()
>>> p = persons[0]
>>> p.name
'Big Shuang'
>>> p.sex
'male'
>>> p.age
24

3 - 改(Update)——修改数据

Django里面,修改数据很简单,修改一下模型实例的属性就可以,然后调用save方法同步到数据库表即可。

示例如下(承接上文命令行中代码)

>>> p = Person.objects.get(id=1)
>>> p.name = "Li hua"
>>> p.save()

执行后数据库表Person内容更新如下

id name sex age
1 Li hua male 24

4 - 删(Delete)——删除数据

删除数据也很简单。

模型实例调用delete方法即可删除数据,

同时不止模型实例可以调用delete方法,本文第二部分提到的QuerySet也可以调用delete方法删除QuerySet中所有行的数据。

简单示例如下(承接上文命令行中代码)

>>> p = Person.objects.get(id=1)
>>> p.delete()
(1, {'myapp.Person': 1})

执行后数据库表Person中对应的数据将被删除。

Django笔记&教程 5-1 基础增删查改的更多相关文章

  1. hibernate基础增删查改简单实例

    hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子 建一个web-project 我这里用了junit单元测试环境来进行增删查改的测试,别的 ...

  2. Django学习笔记009-django models进行数据库增删查改

    引入models的定义 from app.models import  myclass class  myclass(): aa =  models. CharField (max_length=No ...

  3. mysql入门基础增删查改

    数据查询语法(DQL) DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECT selection_list /*要查询的列名称*/ F ...

  4. Django实现数据库中表格的增删查改

    1.urls.py """Django_demo1 URL Configuration The `urlpatterns` list routes URLs to vie ...

  5. django与mysql实现简单的增删查改

    模型定义 from django.db import models class Grades(models.Model): g_name = models.CharField(max_length=2 ...

  6. php学习笔记:对文件的增删查改等操作

    文件的创建: 采用touch()函数,当文件不存在会被创建 例如: <?php header("Content-type: text/html; charset=utf-8" ...

  7. Yii框架基础增删查改

    返回一条数据 Country::find()->one(); 返回所有数据 Country::find()->all(); 返回记录的数量 $country =Country::find( ...

  8. Dapper基础增删查改、事务和存储过程

    1.前言 Dapper是一个轻量级的orm框架,上手也非常的简单,它可以实体映射,所以先准备实体如下: public class Couser { public int id { get; set; ...

  9. Django笔记&教程 总目录

    本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...

随机推荐

  1. SQL Server附加数据库错误5120处理方法

    SQL Server附加数据库5120错误 当我们从另外一台服务器复制过来的数据库,可能会有如下错误: 解决方法 1.给数据库所在文件夹增加用户Everyone并赋予完全控制权限 2.以管理员身份运行 ...

  2. 5分钟实现用docker搭建Redis集群模式和哨兵模式

    如果让你为开发.测试环境分别搭一套哨兵和集群模式的redis,你最快需要多久,或许你需要一天?2小时?事实是可以更短. 是的,你已经猜到了,用docker部署,真的只需要十几分钟. 一.准备工作 拉取 ...

  3. Mybatis-技术专区-Criteria的and和or进行联合条件查询

    之前用Mybatis框架反向的实体,还有实体里面的Example,之前只是知道Example里面放的是条件查询的方法,可以一直不知道怎么用,到今天才开始知道怎么简单的用.在我们前台查询的时候会有许多的 ...

  4. 使用Stargate访问K8ssandra,Springboot整合Cassandra

    1 简介 之前我们在文章<K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes>成功地在Ubuntu上安装了K8ssandra,现在我们来看看如何访问 ...

  5. Unity——对象池管理

    Unity对象池管理 一.Demo展示 二.逻辑 在游戏中会出现大量重复的物体需要频繁的创建和销毁:比如子弹,敌人,成就列表的格子等: 频繁的创建删除物体会造成很大的开销,像这种大量创建重复且非持续性 ...

  6. Redis缓存穿透、缓存击穿、缓存雪崩的介绍及其解决方案

    首先,来画一张图了解下缓存处理的流程 一.缓存穿透 描述: 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求查询该数据,导致数据库压力过大. 解决方案: 1.接口校验 如鉴权校验.数据合法性 ...

  7. Pytorch——张量 Tensors

    张量 Tensors 1.torch.is_tensor torch.is_tensor(obj) 用法:判断是否为张量,如果是 pytorch 张量,则返回 True. 参数:obj (Object ...

  8. python使用Django框架开发简单项目

    一. (1)使用idea生成一个python项目,安装Django框架: pip install django==1.8.2 (2)初始化项目: django-admin startproject x ...

  9. Java:容器类线程不安全

    Java:容器类线程不安全 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. Collection 线程不安全的举例 前言 1.当我们执行下面语句的时候,底层 ...

  10. 【二食堂】Alpha - 测试报告

    TextMarking Alpha阶段测试报告 前后端测试过程及结果 在Alpha阶段,测试工作紧跟后端开发进度,一下是我们所做的一些测试工作. 后端单元测试 测试代码可以在git仓库中查看,后端对所 ...