单表操作-增、删、改、查

ret=models.User.objects.filter(id=1)  #这里的结果是一个queryset对象

ret=modles.User.Objects.filter(ud=1).first()   #这里查询的结果是一个User对象,User就是表

新增记录

第一种方式通过对象来插入

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index),
url(r'^order/', views.order),
url(r'^user/', views.user),
url(r'^add_user/',views.add_user)
]

models.py

from django.db import models

# Create your models here.

#创建一个user表,其实就在orm中就是写一个类
class User(models.Model): #这个类必须继承models.models.Model
'''建表的字段'''
# 这个固定写法,创建表中的id字典int类型,且自增,primary_key=True就是主键
id = models.AutoField(primary_key=True)
# 创建表中的name字段,类型CharField就是等于varchar,括号里的参数就是定义最长的长度
name = models.CharField(max_length=32)
# 创建表中的pwd字典,类型CharField就等于varchar,括号里的参数就是最大的长度,null=true就表示可以为空
pwd = models.CharField(max_length=32,null=True) # 增加字段直接在这里写要增加的字段
addr = models.CharField(max_length=64) # 在增加字段,后面值可以为空,则不会要求输入默认的字段,直接成功创建
yy = models.CharField(max_length=64,null=True) # 括号里的参数default就是设定默认值,创建后自动传入设定的默认值
zz = models.CharField(max_length=64,null=True,default='qqq')

add_user.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增用户</title>
</head>
<body>
{#method只要不写就是get请求#}
<form action="" method="post">
<p>用户名:<input type="text" name="name"></p>
<p>密码:<input type="password" name= 'pwd'></p>
<input type="submit" value="提交">
</form>
</body>
</html>

views.py

from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here. def index(request):
li = 1
return render(request,'index.html',{'li':li}) def order(request):
return render(request,'order.html') def user(request):
return render(request,'user.html') def add_user(request):
if request.method == 'GET':
return render(request,'add_user.html')
elif request.method == 'POST':
name = request.POST.get('name')
pwd = request.POST.get('pwd')
# 这里取到了用户名和密码
'''导入models,可以取得user的对象,通过对象来将前端的数据保存到数据库'''
user = models.User(name=name,pwd=pwd) # 括号里的变量name和pwd是对应对象中的相同名称的变量,变量值的name和pwd是对应这里函数下的变量
# 直接调用save方法,这个save方法就是models.Model中的,因为User对象继承了models.Model
user.save()
return HttpResponse('新增成功')

第二种方式   这种是常用的方式

通过表模型来插入,是一种固定的写法

views.py

from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here. def index(request):
li = 1
return render(request,'index.html',{'li':li}) def order(request):
return render(request,'order.html') def user(request):
return render(request,'user.html') def add_user(request):
if request.method == 'GET':
return render(request,'add_user.html')
elif request.method == 'POST':
name = request.POST.get('name')
pwd = request.POST.get('pwd')
# 中间的User就是表的名字,这种事常用的写法,只需要一条命令即可
user = models.User.objects.create(name=name,pwd=pwd)
return HttpResponse('新增成功')
# 查询操作
# 这个就是查询语句,filter是过滤,用get会报错后面.可以有很多功能first、values等
ret = models.User.objects.filter(name=name).values()
print(ret)
return HttpResponse(ret.get('id')) # 删除操作第一种方式
#这里就是查询id=1的数据,delete方法就是直接删除查询到的所有数据
ret = models.User.objects.filter(id=1).delete()
'''这样写就是把查询出来的所有名字为lqz的数据全部删除了'''
ret = models.User.objects.filter(name='lqz').delete() # 删除操作第二种方式,通过对象删除
user = models.User.objects.filter(id=2).first #first就是把查询到的第一个拿出来
# user就是一个对象
print(user.name) #获取用户名
print(user.pwd) #获取密码
user.delete() #删除这个对象 # 修改操作第一种方式
# 修改id=3的人的名字为xxx
#update把查到的所有数据都更新
ret=models.User.objects.filter(id=3).update(name='xxx')
# 有一个返回值,就是影响的行数,所以这里的ret就是一个数字 # 修改操作的第二种方式,通过对象去修改
ret=models.User.objects.filter(id=3).first()
ret.name='xxx'
ret.save()

queryset对象的方法
all  #结果拿到的是所有的数据
ret=models.User.objects.all()    #这里的返回结果就是queryset对象

filter(**kwargs) #可以传多个值
ret=models.User.objects.filter(id=3,pwd='333')   #filter这种形式id=3,pwd='333'是and条件
ret = models.User.objects.filter(**{'id':3,'pwd':'333'})   #以字典形式传的时候需要在前面加**

get(**kwargs)   #和filter一样传多值
ret=models.User.objects.get(id=3)   #返回值是user对象,如果是book对象,返回值就是book对象

exclude(**kwargs)  #和filter一样传多值  、过滤查询的对象,除输入的条件外其他所有不匹配的数据全部查询出来
ret=models.User.objects.exclude(id=3)

order_by(*field)  #将查询出来的结果根据要求进行排序,查询的值支持多个值

ret=models.User.objects.all().order_by('name')     #这个是正向排序

ret=models.User.objects.all().order_by('-name')    #条件前加一个 - 这个是反向排序

PS:并不是只能用在all后面,可以用在其他的查询方法后

count():    #返回数据库中匹配查询(QuerySet)的对象数量

ret=models.User.objects.filter(name='lqz').first().count()

first()    #返回第一条记录

last()   #返回最后一条记录

exists()    #如果QuerySet包含数据,就返回True,否则返回

ret=models.User.objects.filter(id=10).exists()

values(*field):   #返回一个ValueQuerySet,一个特殊的QuerySet,运行后得到的并不是一系列
model的实例化对象,而是一个可迭代的字典序列

ret=models.User.objects.all().values('name')    # 返回的是特殊的QuerySet对象,QuerySet[{'name':'xxxxxx',}]

ret = models.User.objects.all().values('name','pwd').first()    #这个返回结果就是特殊对象的索引第一个位置的值,就是结果中的第一个值

ret = models.User.objects.all().values('name', 'pwd')    #返回的是一个可迭代的字典序列 <QuerySet [{'name':'xxxx','pwd','9999},{'name':'lqz','pwd':'4456'}]>

values_list(*field)    #它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

ret = models.User.objects.all().values_list('name','pwd')    #这个返回结果就是一个元组 <QuerySet [('xxxxx','999),('lqz','3333')]>

distinct()    #从返回结果中剔除重复纪录

ret=models.User.objects.filter(name='lqz').distinct()

ret = models.User.objects.filter(name='lqz').values('name').distinct()    #后面values的值是去重的条件

(17)模型层 -ORM之msql 单表的增、删、改、查 及其他操作的更多相关文章

  1. (18)模型层 -ORM之msql 多表操作(字段的属性)

    数据库表的对应关系 1.一对一   #关联字段写在那张表都可以 PS:只要写OneToOneField就会自动加一个id 2.一对多  #关系确立,关联字段写在多的一方 3.多对多   #多对多的关系 ...

  2. (19)模型层 -ORM之msql 跨表查询(正向和反向查询)

    基于对象的跨表查询 基于对象的跨表查询'''正向和反向查询'''# 正向 ----> 关联字段在当前表中,从当前表向外查叫正向# 反向 ---> 关联字段不在当前表中,当当前表向外查叫反向 ...

  3. Django之模型层第一篇:单表操作

    Django之模型层第一篇:单表操作 一 ORM简介 ​ 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数 ...

  4. Django的模型层(1)- 单表操作(上)

    一.ORM简介       MTV或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的 ...

  5. 6、Django之模型层第一篇:单表操作

    一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql.oracle ...

  6. 54 Django 模型层(1) 单表查询

    单表操作: 一 项目的操作顺序: 1 在model.py文件中创建表结构 class Book(models.Model): id=models.AutoField(primary_key=True) ...

  7. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

  8. (20)模型层 -ORM之msql 基于双下划线的跨表查询(一对一,一对多,多对多)

    基于对象的跨表查询是子查询 基于双下划线的查询是连表查询 PS:基于双下划线的跨表查询 正向按字段,反向按表名小写 一对一 需求:查询lqz这个人的地址# 正向查询ret = models.Autho ...

  9. Django的模型层(1)- 单表操作(下)

    一.查询表记录 在学习查询表记录之前,先了解一下QuerySet,这是一种类似列表的数据类型,是由ORM创建的.我们学习查询表记录的方法时,一定要明确哪些方法返回了QuerySet类型,哪些方法返回m ...

随机推荐

  1. linux下grep命令详解

    参数: -a 或 --text : 不要忽略二进制的数据. -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行 ...

  2. Win10系列:UWP界面布局基础2

    属性设置 在面向对象程序开发中,所提及的属性通常指的是对象的属性.在XAML代码中,定义元素时也可以为其设置属性,例如对于一个TextBox元素,有背景属性.宽度属性和高度属性等.为了满足实际应用的需 ...

  3. Win10系列:VC++ Direct3D模板介绍1

    Visual Studio为开发Direct3D应用程序提供了便捷的模版,读者可以不必手动去新建Direct3D中所使用到的基础资源,而只需专注于图形的绘制.本小节主要为读者介绍这个模版中用于绘制图形 ...

  4. Win10系列:VC++绘制几何图形2

    新建了Direct2D中的资源后,接下来初始化用于绘制图形的应用窗口.在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的 ...

  5. 【Oracle安装卸载】oracle卸载

    Oracle卸载比较麻烦,不能简单卸载就完成了,有时没有卸载完整,下次安装不能很好的安装: 当然Oracle卸载也没有那么难,只是步骤比较多.Oracle10g还是Oracle11g卸载步骤都是一样的 ...

  6. java Calendar类得到每个月的周末是几号的工具方法

    public static List getWeekendInMonth(int year, int month) { List list = new ArrayList(); Calendar ca ...

  7. Centos7扩展存储空间

    1.在关机状态下,在Vm里面设置系统大小到需要的数值 :2.使用root权限登陆linux,df -h查看系统情况: [root@cratedb-hk-01 ~]# df -h 文件系统 容量 已用 ...

  8. Java Web相关概念调查

  9. synchronized(一)

    /** * 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. * synchronized:可以在任意对象及方法上加锁, ...

  10. day 29 socket 初级版

    # 客户端介绍简单版# import socket# #1买手机# phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STR ...