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 - 单表实例相关推荐

  1. Django ORM – 多表实例

    文章目录 Django ORM – 多表实例 创建模型 实例 表结构 插入数据 ORM - 添加数据 一对多(外键 ForeignKey) app01/views.py 文件代码: app01/vie ...

  2. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询 单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models.T ...

  3. 使用django创建一个单表查询的图书管理系统

    使用django创建一个单表查询的图书管理系统 在settings.py文件中添加(用于连接mysql数据库) DATABASES = {'default': {'ENGINE': 'django.d ...

  4. Django ORM 单表操作

    默认使用sqllite数据库 创建表 # models.py form django.db import models class Book(models.Model): # 表名book,djang ...

  5. Django ORM – 多表实例:Django模型Model的定义+模型间关系

    Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle. Django 为这些数据库提供了统一的调用API. 我们可以根据自己业务需求选择不同的 ...

  6. 12月7日学习内容整理:ORM单表操作

    补充:url(r"^$")  代表只匹配域名,没有路径部分 一.添加: 1.方式一:昨天讲过的实例化对象 2.方式二: stu_obj=类名(就是表名).objects.creat ...

  7. python——Django(ORM连表操作)

    千呼万唤始出来~~~当当当,终于系统要写django的ORM操作啦!!!这里记录的是django操作数据库表一对多.多对多的表创建及操作.对于操作,我们只记录连表相关的内容,介绍增加数据和查找数据,因 ...

  8. Django ORM – 多表实例(聚合与分组查询)

    聚合查询(aggregate) 聚合查询函数是对一组值执行计算,并返回单个值. 聚合查询返回值的数据类型是字典. 聚合函数 aggregate() 是 QuerySet 的一个终止子句, 生成的一个汇 ...

  9. Django之ORM多表一对多、多对多及一对一操作

    1.多表关系介绍 1.1 一对多 Book id title price pub_date publish_id 1 西游记 123 2012-12-12 1 2 三国演义 234 2012-12-1 ...

最新文章

  1. MySQL—03—MySQL的查询
  2. python1000个常用代码-1000个常用的Python库和示例代码
  3. 乐视1s 安装android6,乐视X500(1S) 安卓6.0最终 魅族Flyme6刷机包 最新6.7.12.29R 紫火20180510更新...
  4. s6-7 TCP 传输策略
  5. 做为一名java高级程序员,需要了解哪些岗位?
  6. linux上源码安装mysql,Linux中源码包安装MySQL的shell脚本
  7. 禾匠榜店小程序商城V4独立版V4.0.25 前端+后端
  8. 负margin几种用法的总结
  9. Windows 8 Directx 开发学习笔记(十一)地形纹理贴图
  10. dategurd oracle_Oracle Data Guard
  11. 关于英语论文范文参考步骤的详细介绍
  12. 华为路由器交换机命令汇总-持续更新
  13. 前端重新学习(17)DOM 扩展
  14. PHP实现页面静态化、纯静态化及伪静态化
  15. probability是什么意思_probability是什么意思_probability怎么读_probability翻译_用法_发音_词组_同反义词_可能性-新东方在线英语词典...
  16. EPICS记录参考--多位二进制输入记录(mbbi)
  17. 网件R7000 梅林380固件安装 阿里云WebDav
  18. 实验三、8人智力竞赛抢答电路设计
  19. 自动驾驶入门技术(10)—— 高精地图(HAD MAP)
  20. 算法时间复杂度的符号

热门文章

  1. 如何写一个游戏AI(三)0-9手写数字图片识别AI训练
  2. 企业网盘市场白热化,华为、百度个人云盘厂商进军企业市场
  3. 一共470多例winform 界面特效的源码
  4. uniapp 文字无缝从右到左滚动
  5. 2013年笔记本综合排行榜出炉 苹果包揽前三
  6. 不能在MEMO,OLE或超级链接
  7. 中等计算机的配置,2018玩游戏的电脑配置 i3-8100配GTX1050Ti吃鸡中等特效电脑配置(2)...
  8. 做题娃娃用计算机,小学生学编程,到底有什么用?
  9. 用EasyAR SDK开发 视+APP 效果(中)
  10. 病毒,木马,蠕虫三者的区别: