Django学习笔记--数据库中的单表操作----增删改查
1.Django数据库中的增删改查
1.添加表和字段
# 创建的表的名字为app的名称拼接类名
class User(models.Model):
# id字段 自增 是主键
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
pwd = models.CharField(max_length=32,null=True)
#新增字段 设置为空或者指定默认值
age = models.IntegerField(null=True)
yy = models.CharField(default="你好")
# 删除字段,直接注释掉对应的属性
# 删除表,直接注释掉整个类即可
对表进行操作之后必须要执行数据库记录和同步数据库的操作
python3 manage.py makemigrations 数据库表变化记录
pythons manage.py migrate 数据库同步命令
2.插入数据
根据创建的模型,对其进行赋值
# 添加到数据库方式一 :通过对象保存
user = models.User(name=name,pwd=pwd)
user.save()
# 添加到数据库方式二 通过表模型固定的使用方式
user = models.User.objects.create(name=name,pwd=pwd)
# 返回值可以不用处理,直接调用这个方法,通过表名去创建对应的数据
3.为了方便对数据进行处理,在python脚本中调用Django环境
创建新的py文件
import os
# 构建模拟的django运行环境,在下面直接测试数据和修改对应的展示数据
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoDay02.settings")
import django
django.setup()
4.对数据操作,增删改查
# 查询对应的数据,filter过滤数据,查询结果是一个queryset对象,可以理解为一个列表对象
# first() 取出第一条数据
res = models.User.objects.filter(id=1)
print(res)
# 删除对象,delete()把查询出来的对象都删除,ret对象不用太关注,返回值是影响的数据的数量和对应的值
ret = models.User.objects.filter(name="你好").delete()
# 删除方式二,获取对象,对象调用删除方法
user = models.User.objects.filter(id=2).first()
user.delete()
# 修改数据第一种方式
res = models.User.objects.filter(id=3).update(name="我就是我")
# 第二种方法
user = models.User.objects.filter(id=3).first()
user.name = "再次修改"
user.save() #保存数据
5.单表查询的其他操作
1.all() 查询所有结果
# 获取User表中的所有数据
users = models.User.objects.all()
print(users)2.filter(**kwargs) 筛选指定条件的对象,对个条件可以同时查询,相当于一个and操作
user = models.User.objects.filter(id=2)
3.get(**kwargs) 返回筛选的对象,返回结果之后一个,如果返回的结果超过一个或者一个都没有就会抛出异常,可以查看get的源码会抛出两个异常
try:
models.User.objects.get(name__contains='zhang')
except models.User.DoesNotExist:
print('值不存在')
except models.User.MultipleObjectsReturned:
print("不止一个值")
else:
print("有值成功")
4.exclude(**kwargs) 包含了所筛选条件不匹配的对象
# 把id不等于3的都传过来
user = models.User.objects.exclude(id=3)
5.order_by(*field) 对查询结果进行排序,默认根据id排序,输入要排序的字段名,反向排序在对应的字段前添加- ```python
res = models.User.objects.filter(name__contains="你好").order_by('name')
res = models.User.objects.all().order_by('-name')
6.reverse() 对查询结果反向排序,必须在order_by之后才能使用reverse(),否则没有效果
users = models.User.objects.filter(name__contains="你好").reverse()
7.count() 返回查询的querySet对象的个数
users = models.User.objects.filter(name__contains="你好").count()
8.first() 返回第一条记录
user = models.User.objects.filter(id=2).first()9.last() 返回最后一条记录
user = models.User.objects.filter(id=2).last()10.exists() 如果querySet包含数据,就返回True,否则返回False
# 判断查询结果是否为空
res = models.User.objects.filter(id=30).exists()
print(res)
11.values(*field) 返回一个valueQuerySet对象一个特殊的QuerySet,运行后得到的是一个可迭代的字典序列,而不是一个model的实例化对象,可以传多个值进行取值操作 ```python
#获取对应的values,取出对应的name字段对应的值,返回的是一个字典
ret = models.User.objects.all().values('name')
print(ret)
返回结果 <QuerySet [{'name': 'zhangsan'}, {'name': '我就是我'}, {'name': 'zhang1'}, {'name': 'zhang2'}, {'name': 'zhang3'}, {'name': 'zhang4'}, {'name': 'zhang5'}, {'name': 'zhang6'}, {'name': 'zhang7'}, {'name': 'zhang8'}, {'name': 'zhang9'}, {'name': '你好0'}, {'name': '你好2'}, {'name': '你好4'}, {'name': '你好6'}, {'name': '你好8'}, {'name': '你好10'}, {'name': '你好12'}, {'name': '你好14'}, {'name': '你好16'}, '...(remaining elements truncated)...']>
12.value_list(*field) 与values() 非常相似,返回的是一个元组序列,values返回的是一个字段序列,可以传多个值进行取值操作
# 获取对应的values,取出对应的name字段对应的值,返回的是一个元组
ret = models.User.objects.all().values_list('name')
print(ret)
返回结果 <QuerySet [('zhangsan',), ('我就是我',), ('zhang1',), ('zhang2',), ('zhang3',), ('zhang4',), ('zhang5',), ('zhang6',), ('zhang7',), ('zhang8',), ('zhang9',), ('你好0',), ('你好2',), ('你好4',), ('你好6',), ('你好8',), ('你好10',), ('你好12',), ('你好14',), ('你好16',), '...(remaining elements truncated)...']>
13.distinct() 从返回结果中删除重复数据
user = models.User.objects.filter(name='zhangsan').distinct()
6.模糊查询
# 模糊查询,基于 __双下滑线模糊查询
# 查询在某个区间的值,查询id在1,2,3,4,5区间的所有值
ret = models.User.objects.filter(id__in=[1,2,3,4,5])
ret = models.User.objects.filter(id__range=[1, 200])
# id__in 在某个区间
# id__gt 大于某个值
# id__lt 小于某个值
# id__gte 大于等于
# id__lte 小于等于
# id__range 在某个范围
# id__contains 包含,
# id__icontains 忽略大小写
# id__startswith 以什么开始
Django学习笔记--数据库中的单表操作----增删改查的更多相关文章
- django学习笔记--数据库中的多表操作
1.Django数据库----多表的新增操作 1.一对一模式下新增 创建一个详情对象,把这个对象赋值给创建的新的user对象 author_detail = models.AuthorDetail.o ...
- Django学习笔记(7)——单表操作和多表操作
单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...
- Django中对单表的增删改查
之前的简单预习,重点在后面 方式一: # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.objects.creat ...
- oracle学习笔记系列------oracle 基本操作之表的增删改查
--创建一个表 CREATE TABLE employee_souvc( id ), name ), gender ), birth DATE, salary ,), job ), deptno ) ...
- Django学习笔记(10)——Book单表的增删改查页面
一,项目题目:Book单表的增删改查页面 该项目主要练习使用Django开发一个Book单表的增删改查页面,通过这个项目巩固自己这段时间学习Django知识. 二,项目需求: 开发一个简单的Book增 ...
- python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...
- Mysql学习笔记(三)对表数据的增删改查。
正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...
- hibernate对单表的增删改查
ORM: 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 实现对单表的增删改查 向区域表中增加数据: 第一步: 新建一个Da ...
- django模型层 关于单表的增删改查
关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...
随机推荐
- [LOJ161] 仙人掌计数
Statement 带标号仙人掌计数问题. \(n< 131072\). Solution 设\(x\)个点的仙人掌个数的生成函数为\(C(x)\) 对于与根相邻的块, 还是仙人掌, 生成函数为 ...
- HDU 6121 Build a tree(k叉树的子树大小相异)
http://acm.hdu.edu.cn/showproblem.php?pid=6121 题目大意: 给你一颗 n 个节点的完全 k 叉树,问你这棵树中所有子树结点个数的总异或值. 分析: 我们很 ...
- innobackupex对MySQL做热备份,报错mysql库下数据字典表损坏
[root@node1 op]#mysql -Vmysql Ver 14.14 Distrib 5.6.29innobackupex热备份MySQL报错,报错信息:[root@node1 op]#in ...
- P3956棋盘
传送 这看起来有点像个搜索,那我们就用搜索试试. dfs?bfs? 其实都可以,但是窝只会dfs.. 既然这里要用dfs,那么就要把每次搜到(m,m)时,使用的金币数量进行比较,取最小值. 在搜索过程 ...
- CDN:分类
ylbtech-CDN:分类 1.返回顶部 1. bootstrap Bootstrap 是全球最受欢迎的前端组件库,用于开发响应式布局.移动设备优先的 WEB 项目. 2. feather-icon ...
- scrapy-redis源码浅析
原文链接 前言 分析这个项目的源码原因是需要有去重过滤,增量爬取两个功能,而scrapy-redis项目已经帮我们实现了,想看看他是怎么实现的.这里只贴出部分主要代码,查看时请打开源码对照,笔记有点长 ...
- 实验1 C语言开发环境...
#include<stdio.h> int main(){ int days; printf("输入一个整数:\n") ; scanf("%d",& ...
- Linux 系统故障修复和修复技巧
我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应用单用户模式.GRUB命令操作.Linux救援模式的故障修复案例帮助大家了解此类问题的解决. 一.单用户模式 L ...
- Bootstrap 学习笔记7 模态框插件
网站弹出框使用: 基本使用: <!-- 模态框的声明 --> <div class="modal" id="myModal" tabindex ...
- jdk (Java Development Kit)
JDK是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JD ...