Django笔记&教程 5-1 基础增删查改
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 基础增删查改的更多相关文章
- hibernate基础增删查改简单实例
hibernate 基础理论知识网上很多,可以百度和google.这里不做多的介绍,以一个User表来开展例子 建一个web-project 我这里用了junit单元测试环境来进行增删查改的测试,别的 ...
- Django学习笔记009-django models进行数据库增删查改
引入models的定义 from app.models import myclass class myclass(): aa = models. CharField (max_length=No ...
- mysql入门基础增删查改
数据查询语法(DQL) DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECT selection_list /*要查询的列名称*/ F ...
- Django实现数据库中表格的增删查改
1.urls.py """Django_demo1 URL Configuration The `urlpatterns` list routes URLs to vie ...
- django与mysql实现简单的增删查改
模型定义 from django.db import models class Grades(models.Model): g_name = models.CharField(max_length=2 ...
- php学习笔记:对文件的增删查改等操作
文件的创建: 采用touch()函数,当文件不存在会被创建 例如: <?php header("Content-type: text/html; charset=utf-8" ...
- Yii框架基础增删查改
返回一条数据 Country::find()->one(); 返回所有数据 Country::find()->all(); 返回记录的数量 $country =Country::find( ...
- Dapper基础增删查改、事务和存储过程
1.前言 Dapper是一个轻量级的orm框架,上手也非常的简单,它可以实体映射,所以先准备实体如下: public class Couser { public int id { get; set; ...
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
随机推荐
- 2017年第二届广东省强网杯线上赛WEB:Musee de X writeup(模板注入漏洞)
目录 解题思路 总结 解题思路 拿到手上,有四个页面 首先按照题目要求执行,尝试注册一个名为admin的账户 这种情况,路径都给出来了,很可能就是目录遍历或者文件上传了 回到初始界面,点击链接here ...
- 初探计算机网络之CPU和内存
CPU CPU是一块超大规模的集成电路板,是计算机的核心部件,承载着计算机的主要运算和控制功能,是计算机的最终解释模块和执行模块.总之,用一句话概括就是,CPU是由控制器和运算器组成的,而内部寄存 ...
- JVM学习笔记——GC垃圾收集器
GC 垃圾收集器 Java 堆内存采用分代回收算法,因此 JVM 针对新生代和老年代提供了多种垃圾收集器. 1. Serial 收集器 Serial 收集器是单线程收集器,采用复制算法. 是最基本的垃 ...
- 用OpenCV显示视频时遇到问题
刚刚接触OpenCV,运行了书上的例程,程序编译没有问题,在视频显示快要结束时遇到了下面的问题,代码在后面 #include "stdafx.h"#include <open ...
- 构建idea父工程
构建idea父工程 首先通过idea新建一个Maven项目: 选择本地Maven版本: 工程名称: 选择字符编码:utf-8 file -> Settings -> Editor -> ...
- 题解 「2017 山东一轮集训 Day5」苹果树
题目传送门 题目大意 给出一个 \(n\) 个点的图,每个点都有一个权值 \(f_i\) ,如果 \(f_i=-1\) 表示 \(i\) 这个点是坏的.定义一个点是有用的当且仅当它不是坏的,并且它连的 ...
- pycharm上的python虚拟环境移到离线机器上
Pycharm的Terminal 中执行: 查看现有的包到requirements.txt中 pip freeze > requirements.txt 生成依赖包 D:\machangwei\ ...
- 【c++ Prime 学习笔记】第13章 拷贝控制
定义一个类时,可显式或隐式的指定在此类型对象上拷贝.移动.赋值.销毁时做什么.通过5种成员函数实现拷贝控制操作: 拷贝构造函数:用同类型的另一个对象初始化本对象时做什么(拷贝初始化) 拷贝赋值算符:将 ...
- Java序列元素替换
1.数组 直接赋值. 2.String (1) String是不可变的,只能将新的字符串重新赋给String变量.可使用substring进行拼接: String s="hello" ...
- 机器学习:EM算法
EM算法 各类估计 最大似然估计 Maximum Likelihood Estimation,最大似然估计,即利用已知的样本结果,反推最有可能(最大概率)导致这样结果的参数值的计算过程. 直白来讲,就 ...