Django丨ORM - 单表实例
ORM - 单表实例
创建一个项目
django-admin.py startproject app01
在settings.py中修改INSTALLED_APPS
INSTALLED_APPS = ('django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01', # 添加此项
)
创建模型
项目中的models.py
# app01/models.py
class Sites(models.Model):id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入title = models.CharField(max_length=32) # 书籍名称price = models.DecimalField(max_digits=5, decimal_places=2) # 书籍价格publish = models.CharField(max_length=32) # 出版社名称pub_date = models.DateField() # 出版时间
执行命令
python3 manage.py migrate # 创建表结构python3 manage.py makemigrations app01 # 让 Django 知道我们在我们的模型有一些变更
python3 manage.py migrate app01 # 创建表结构
注:需要连接数据库
添加数据
路由配置
# app01/urls.py
from django.contrib import admin
from django.urls import path
from . import viewsurlpatterns = [path('add_book/', views.add_book),
]
- 方式一:模型类实例化对象
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):book = models.Book(title="python程",price=300,publish="hero",pub_date="2008-8-8") book.save()return HttpResponse("<p>数据添加成功!</p>")
- 方式二:通过ORM提供的objects提供的方法create来实现
from django.shortcuts import render, HttpResponse
from app01 import models def add_book(request):books = models.Book.objects.create(title="如来神掌", price=200, publish="功夫出版社", pub_date="2010-10-10") return HttpResponse("<p>数据添加成功!</p>")
查找数据
- 使用all()方法来查询所有内容
返回的是QuerySet类型数据,类似于list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models def add_book(request):books = models.Book.objects.all() print(books, type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。return HttpResponse("<p>查找成功!</p>")
- filter()方法用于查询符合条件的数据
返回的是QuerySet类型数据,里面放的是满足条件的模型类的对象,可用索引下标取出模型类的对象。
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):books = models.Book.objects.filter(pk=5)print(books)print("//")books = models.Book.objects.filter(publish='python', price=300)print(books, type(books)) # QuerySet类型,类似于list。return HttpResponse("<p>查找成功!</p>")
注:pk意思是primary key,相当于id
- exclude()方法用于查询不符合条件的数据
返回的是QuerySet类型数据。
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models def add_book(request):books = models.Book.objects.exclude(pk=5)print(books)print("//")books = models.Book.objects.exclude(publish='菜鸟出版社', price=300)print(books, type(books)) # QuerySet类型,类似于list。return HttpResponse("<p>查找成功!</p>")
- get()方法用于查询符合条件的,返模型类的对象符合条件的对象只能为一个,如果符合筛选条件的对象超过了一个或者没有一个都会抛出错误。
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models def add_book(request):books = models.Book.objects.get(pk=5)books = models.Book.objects.get(pk=18) # 报错,没有符合条件的对象books = models.Book.objects.get(price=200) # 报错,符合条件的对象超过一个print(books, type(books)) # 模型类的对象return HttpResponse("<p>查找成功!</p>")
- order_by()方法用于对查询结果进行排序
返回的是QuerySet类型数据。
注:
1、参数的字段名要加引号
2、降序为在字段前面加个符号 -
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):books = models.Book.objects.order_by("price") # 查询所有,按照价格升序排列 books = models.Book.objects.order_by("-price") # 查询所有,按照价格降序排列return HttpResponse("<p>查找成功!</p>")
- count()方法用于查询数据的数量返回的数据是整数
# app01/views.py
from django.shortcuts import render,HttpResponse
from app01 import models def add_book(request):books = models.Book.objects.count() # 查询所有数据的数量 books = models.Book.objects.filter(price=200).count() # 查询符合条件数据的数量return HttpResponse("<p>查找成功!</p>")
- exists()方法用于判断查询的结果,返回的数据类型是布尔,有为True,没有为False
from django.shortcuts import render,HttpResponse
from app01 import modelsdef add_book(request):books = models.Book.objects.exists()# 报错,判断的数据类型只能为QuerySet类型数据,不能为整型books = models.Book.objects.count().exists()# 报错,判断的数据类型只能为QuerySet类型数据,不能为模型类对象books = models.Book.objects.first().exists() return HttpResponse("<p>查找成功!</p>")
注:判断的数据类型只能为QuerySet类型数据
- distinct()方法用于对数据进行去重,返回的是QuerySet类型数据
注:
1、对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在
2、distinct()一般是联合values或者values_list使用
from django.shortcuts import render,HttpResponse
from app01 import modelsdef add_book(request):# 查询一共有多少个出版社books = models.Book.objects.values_list("publish").distinct() # 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在。books = models.Book.objects.distinct()return HttpResponse("<p>查找成功!</p>")
filter()方法基于双下划线的模糊查询(exclude同理)
from django.shortcuts import render,HttpResponse
from app01 import modelsdef add_book(request):# 查询价格为200或者300的数据books = models.Book.objects.filter(price__in=[200,300])return HttpResponse("<p>查找成功!</p>")
- __gt大于号,=号后面为数字(greater than)
# 查询价格大于200的数据
books = models.Book.objects.filter(price__gt=200)
- __gte大于等于,=号后面位数字(greater than or equal to)
# 查询价格大于等于200的数据
books = models.Book.objects.filter(price__gte=200)
- __lt小于
# 查询价格小于300的数据
books=models.Book.objects.filter(price__lt=300)
- __lte小于等于
# 查询价格小于等于300的数据
books=models.Book.objects.filter(price__lte=300)
- __contains包含
books = models.Book.objects.filter(title__contains="菜")
- __icontains不区分大小写的包含
books = models.Book.objects.filter(title__icontains="python") # 不区分大小写
删除数据
- 方式一:使用模块类的
对象.delete()
返回值:元组,第一个元素为受影响的行数
books = models.Book.objects.filter(pk=8).first().delete()
- 方式二:使用QuerySet
类型数据.delete()
返回值:元组,第一个参数为受影响的行数
books = models.Book.objects.filter(pk__in=[1, 2]).delete()
注:
1、Django删除数据时,会模仿SQL约束ON DELETE CASCADE的行为,也就是删除一个对象也会删除与它相关两的外键对象。
2、delete()方法是QuerySet数据类型的方法,但并不适用于Manager本身。想要删除所有数据,不能不写all。
books=models.Book.objects.delete() # 报错
books=models.Book.objects.all().delete() # 删除成功
修改
- 方式一
模型类的对象.属性 = 更改的属性值
模型类的对象.save()
返回值:编辑的模型类的对象
方式二:QuerySet类数据 update(字段名=更改的数据)
返回值:整数,受影响的行数
from django.shortcuts import render,HttpResponse
from app01 import modelsdef add_book(request):books = models.Book.objects.filter(pk__in=[7, 8]).update(price=888)return HttpResponse(books)
Django丨ORM - 单表实例相关推荐
- Django ORM – 多表实例
文章目录 Django ORM – 多表实例 创建模型 实例 表结构 插入数据 ORM - 添加数据 一对多(外键 ForeignKey) app01/views.py 文件代码: app01/vie ...
- ORM单表查询,跨表查询,分组查询
ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models.T ...
- 使用django创建一个单表查询的图书管理系统
使用django创建一个单表查询的图书管理系统 在settings.py文件中添加(用于连接mysql数据库) DATABASES = {'default': {'ENGINE': 'django.d ...
- Django ORM 单表操作
默认使用sqllite数据库 创建表 # models.py form django.db import models class Book(models.Model): # 表名book,djang ...
- Django ORM – 多表实例:Django模型Model的定义+模型间关系
Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django 为这些数据库提供了统一的调用API. 我们可以根据自己业务需求选择不同的 ...
- 12月7日学习内容整理:ORM单表操作
补充:url(r"^$") 代表只匹配域名,没有路径部分 一.添加: 1.方式一:昨天讲过的实例化对象 2.方式二: stu_obj=类名(就是表名).objects.creat ...
- python——Django(ORM连表操作)
千呼万唤始出来~~~当当当,终于系统要写django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...
- Django ORM – 多表实例(聚合与分组查询)
聚合查询(aggregate) 聚合查询函数是对一组值执行计算,并返回单个值. 聚合查询返回值的数据类型是字典. 聚合函数 aggregate() 是 QuerySet 的一个终止子句, 生成的一个汇 ...
- Django之ORM多表一对多、多对多及一对一操作
1.多表关系介绍 1.1 一对多 Book id title price pub_date publish_id 1 西游记 123 2012-12-12 1 2 三国演义 234 2012-12-1 ...
最新文章
- MySQL—03—MySQL的查询
- python1000个常用代码-1000个常用的Python库和示例代码
- 乐视1s 安装android6,乐视X500(1S) 安卓6.0最终 魅族Flyme6刷机包 最新6.7.12.29R 紫火20180510更新...
- s6-7 TCP 传输策略
- 做为一名java高级程序员,需要了解哪些岗位?
- linux上源码安装mysql,Linux中源码包安装MySQL的shell脚本
- 禾匠榜店小程序商城V4独立版V4.0.25 前端+后端
- 负margin几种用法的总结
- Windows 8 Directx 开发学习笔记(十一)地形纹理贴图
- dategurd oracle_Oracle Data Guard
- 关于英语论文范文参考步骤的详细介绍
- 华为路由器交换机命令汇总-持续更新
- 前端重新学习(17)DOM 扩展
- PHP实现页面静态化、纯静态化及伪静态化
- probability是什么意思_probability是什么意思_probability怎么读_probability翻译_用法_发音_词组_同反义词_可能性-新东方在线英语词典...
- EPICS记录参考--多位二进制输入记录(mbbi)
- 网件R7000 梅林380固件安装 阿里云WebDav
- 实验三、8人智力竞赛抢答电路设计
- 自动驾驶入门技术(10)—— 高精地图(HAD MAP)
- 算法时间复杂度的符号
热门文章
- 如何写一个游戏AI(三)0-9手写数字图片识别AI训练
- 企业网盘市场白热化,华为、百度个人云盘厂商进军企业市场
- 一共470多例winform 界面特效的源码
- uniapp 文字无缝从右到左滚动
- 2013年笔记本综合排行榜出炉 苹果包揽前三
- 不能在MEMO,OLE或超级链接
- 中等计算机的配置,2018玩游戏的电脑配置 i3-8100配GTX1050Ti吃鸡中等特效电脑配置(2)...
- 做题娃娃用计算机,小学生学编程,到底有什么用?
- 用EasyAR SDK开发 视+APP 效果(中)
- 病毒,木马,蠕虫三者的区别: