Django(8)ORM单表实例


此文章参考菜鸟教程:Django ORM – 单表实例 | 菜鸟教程 (runoob.com)

Django版本:

>>> django.VERSION  
(4, 1, 0, 'final', 0)

PS:基于前几章的进度进行修改

一、Django ORM 单表实例

  • 之前在Django模型章节中简单的了解ORM,包括创建数据表,增加、修改、删除数据等,之后几章都会继续了解ORM实例

  • 下面创建一个新的项目app1

#终端执行,创建app1数据模型
django-admin startproject app1 
  • 修改app1/app1/settings.py文件
——————————————————————————————————
ALLOWED_HOSTS = ['*']

——————————————————————————————————
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1_model',  #添加将要创建的数据模型
]
——————————————————————————————————
#指定数据库
DATABASES = {
    'default': 
    {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'app1',
        'HOST': '10.10.11.218',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123456',
    }
}
——————————————————————————————————
#修改字符、时区
LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_TZ = True
——————————————————————————————————
  • app1/app1/__init__.py文件导入mysql模块
import pymysql
pymysql.install_as_MySQLdb()
  • 在mysql数据库上创建数据库,记得指定数据库编码==(可以使用Nacicat创建,指定utf8和utf8_general_ci的排序规则)==
mysql> create database app1 default charset=utf8;
Query OK, 1 row affected (0.00 sec)

创建新模型

  • 终端执行,创建模型app1_model
#在第一层app1目录执行
django-admin startapp app1_model
  • 修改app1/app1_model/models.py文件
# -*- coding: utf-8 -*-
from django.db import models

class Book(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()	#出版时间
  • 终端执行,创建表结构

注意:注意要在manage.py目录下执行,如果执行错的话,可以先把app1_model目录中的migrations子目录删除,然后到正确目录执行

(test) PS F:\django\app1> python .\manage.py migrate  #创建表的主结构
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
    
    
    
(test) PS F:\django\app1> python .\manage.py makemigrations app1_model  #提交app1_model的修改
Migrations for 'app1_model':
  app1_model\migrations\0001_initial.py
    - Create model Book
    
    
    
(test) PS F:\django\app1> python .\manage.py migrate app1_model  #创建app1_model的表结构
Operations to perform:
  Apply all migrations: app1_model
Running migrations:
  Applying app1_model.0001_initial... OK
  • 查看mysql数据库,成功创建
mysql> use app1;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_app1             |
+----------------------------+
| app1_model_book            |
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
11 rows in set (0.00 sec)

mysql> show create table app1_model_book;
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table           | Create Table                                                                                                                                                                                                                                                        |
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| app1_model_book | CREATE TABLE `app1_model_book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(32) NOT NULL,
  `price` decimal(5,2) NOT NULL,
  `publish` varchar(32) NOT NULL,
  `pub_date` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
  • 当前目录结构

在这里插入图片描述

二、数据库操作

(1)添加数据

  • 配置路由,app1/app1/urls.py
from django.contrib import admin
from django.urls import path
from . import views  #导入视图

urlpatterns = [
    path('admin/', admin.site.urls),
    path('add_book/',views.add_book),  #添加路由
]
  • 数据库添加数据,这里菜鸟教程提供两种方法,分别是
  1. 模型实例化对象
  2. 通过ORM提供的objects中的方法
  • 这里使用第二种。创建视图文件,/app1/app1/views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    books = models.Book.objects.create(title='九阴神功',price=200,publish='功夫出版社',pub_date='1777-10-10')  
    print(books,type(books))
    return HttpResponse('<p>数据添加成功!</p>')
  • 现在在终端启动django项目
(test) PS F:\django\app1> python .\manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
September 06, 2022 - 15:06:52
Django version 4.1, using settings 'app1.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CTRL-BREAK.
  • 访问127.0.0.1:8000/add_book

在这里插入图片描述

  • 查看数据库,发现成功添加(我这里编码有问题,所以显示乱码了)

在这里插入图片描述

  • 查看终端输出,可以发现输出的第一个就是之前admin管理平台的那种格式

在这里插入图片描述

  • 根据上述方法,添加多条数据

在这里插入图片描述

(2)查找数据

  • 使用all()方法查询所有数据,返回QuerySet类型数据,类似于列表,里面存放一个个模型类的对象,可以使用索引下标取出模型类的对象,实例:
- 修改app1/app1/views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    books = models.Book.objects.all()
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,查看终端输出,可以发现books输出了一个QuerySet

在这里插入图片描述
在这里插入图片描述

  • 查看具体字段可以使用for循环
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    books = models.Book.objects.all()
    for i in books:
        print(i.title)
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,查看终端输出

在这里插入图片描述

- filter()

  • filter()方法用于查询符合条件的数据,返回QuerySet类型数据,实例:
- 修改app1/app1/views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(pk=3)  #pk代表主键,即筛选主键等于3的数据,相当于id=3
    print(books)
    print("------------------------------")
    books = models.Book.objects.filter(publish="金庸出版社")  #筛选publish字段为金庸出版社的数据
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,查看终端输出

在这里插入图片描述

  • 可以添加多个条件
- 修改app1/app1/views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(pk=3)
    print(books)
    print("------------------------------")
    books = models.Book.objects.filter(publish="金庸出版社",price=200)
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

  • 使用for循环可以查看数据实例
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(pk=3)
    #print(books)
    for i in books:
        print(i.title)
        
    print("------------------------------")
    books = models.Book.objects.filter(publish="金庸出版社",price=200)
    for i in books:
        print(i.title)
        
    #print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

- exclude()

  • exclude()方法用于查询不符合条件的数据,同样返回QuerySet数据类型,实例:
# -*- coding: utf-8 -*-
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.exclude(publish="金庸出版社")
    for i in books:
        print(i.title)
    #print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

- get()

  • get()方法用于查询符合条件的返回模型类的对象,符合条件的对象只能有一个,如果符合筛选条件的对象超过一个或者没有,都会抛出错误,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #三个查询代码依次执行
    books = models.Book.objects.get(pk=2)
    #books = models.Book.objects.get(pk=5)
    #books = models.Book.objects.get(price=200)
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.get(pk=2)
    books = models.Book.objects.get(pk=5)
    #books = models.Book.objects.get(price=200)
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,发现报错,这是因为主键id没有等于5的

在这里插入图片描述

在这里插入图片描述

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.get(pk=2)
    #books = models.Book.objects.get(pk=5)
    books = models.Book.objects.get(price=200)
    print(books,type(books))
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,因为price字段等于200的有两条数据,返回了两个,所以报错了

在这里插入图片描述
在这里插入图片描述

- order_by()

  • order_by()方法用于对查询结果进行排序,返回QuerySet类型数据
  • 注意:
  1. 参数的字段名要加引号
  2. 降序是在字段前面加一个杠-
  • 实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.order_by("price")
    #books = models.Book.objects.order_by("-price")
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.order_by("price")
    books = models.Book.objects.order_by("-price")
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

- reverse()

  • reverse()方法用于对查询结果进行反转,返回QuerySet数据类型,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.order_by("price")
    books = models.Book.objects.order_by("-price").reverse()
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试
    在这里插入图片描述

在这里插入图片描述

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.order_by("price").reverse()
    #books = models.Book.objects.order_by("-price").reverse()
    print(books)
    for i in books:
        print(i.price)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试
    在这里插入图片描述

在这里插入图片描述

- count()

  • count()方法用于查询数据的数量,返回的是整数,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.count()
    #books = models.Book.objects.filter(price=200).count()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

  • 也可以统计条件查询的数据量
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.count()
    books = models.Book.objects.filter(price=200).count()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

- first()

  • first()方法返回第一条数据,返回的数据是模型类的对象,可以使用索引下标[0],实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.first()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

  • 同样可以应用在条件查询上
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price=300).first()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

- last()

  • last()方法和first()相反,返回最后一条数据
  • 注意:

不能使用下标索引[-1],因为ORM没有逆向索引

  • 实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price=200).last()
    print(books)
    books = models.Book.objects.last()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试
    在这里插入图片描述

在这里插入图片描述

- exists()

  • exists()方法用于判断查询结果中是否有数据,返回的布尔值,有数据为True,没有则是False

    注意:判断的数据类型只能是QuerySet数据类型,不能是整型或者模型类对象

  • 实例:

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.exists()
    #books = models.Book.objects.count().exists()
    #books = models.Book.objects.first().exists()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,存在数据,并且数据类型为QuerySet
    在这里插入图片描述
    在这里插入图片描述
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.exists()
    books = models.Book.objects.count().exists()
    #books = models.Book.objects.first().exists()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,返回数据类型不能是int
    在这里插入图片描述
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.exists()
    #books = models.Book.objects.count().exists()
    books = models.Book.objects.first().exists()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试,返回数据类型不能是模型类对象

在这里插入图片描述

- values()

  • values()方法用于查询部分字段的数据,返回一个QuerySet数据类型,每条数据都是一个字典
  • 注意:
  1. 参数的字段名称要加引号
  2. 想要字段名称和数据使用values
  • 实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.values("pk","price","title") #只查询指定字段,返回的QuerySet中每条数据都是一个字典
    print(books[0]["price"],type(books))
    for i in books:
        print(i)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

- values_list()

  • values_list()方法用于查询部分字段的数据,返回一个QuerySet数据类型,每条数据都是一个元组,实例:
  • 注意:
  1. 参数的字段名称要加引号
  2. 想要字段名称和数据使用values_list
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.values_list("pk","price","title")
    print(books[1][2],type(books))
    for i in books:
        print(i)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

- distinct()

  • distinct()方法用于对数据的去重,返回QuerySet数据类型
  • 注意:
  1. 对模型类的对象去重没有意义,因为每个对象都是一个不一样的存在
  2. distinct()一般都是联合values或者values_list使用
  • 实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.values_list("publish").distinct()
    #books = models.Book.objects.distinct()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    #books = models.Book.objects.values_list("publish").distinct()
    books = models.Book.objects.distinct()
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试
    在这里插入图片描述

在这里插入图片描述

(3)exclude()和filter()的条件查询

  • filter()方法基于双下划线的模糊查询,exclude也是同理
  • 注意:

filter中运算符只能使用等于号:=,不能使用大于、小于号以及其他符号

__in

  • __in用于读取区间,而=后面为列表
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price__in=[200,300])
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__gt

  • __gt大于,=号后面为数字
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price__gt=250)
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__gte

  • __gte大于等于,=号后面为数字
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price__gte=300)
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

__lt

  • __lt小于,=号后面为数字
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price__lt=300)
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

__lte

  • __lte小于等于,=号后面为数字
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price__lte=300)
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__range

  • __range在…之间,=号后面为两个元素的列表
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price__range=[250,350])
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__contains

  • __contains包含,=号后面为字符串
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="九阴神功",price=200,publish="功夫出版社",pub_date="1777-10-10")  
    books = models.Book.objects.filter(price__contains="金庸")
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__icontains

  • __icontains包含==(不区分大小写)==,=号后面为字符串
  • 提前增加数据

在这里插入图片描述

  • 修改文件
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(title__icontains="python")
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

__startswith

  • __startswith以指定字符开头,=号后面为字符串
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(title__startswith="P")
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__endswith

  • __endswith以指定字符结尾,=号后面为字符串
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(title__endswith="on")
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试
    在这里插入图片描述

在这里插入图片描述

__year

  • __year是DateField数据类型的年份=号后面为数字
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(pub_date__year=1798)
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__month

  • __month是DateField数据类型的月份=号后面是数字
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(pub_date__month=10)
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述

在这里插入图片描述

__day

  • __day是DateField数据类型的天数,=号后面为数字
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(pub_date__day=13)
    print(books)
    return HttpResponse('<p>查找成功!</p>')
  • 访问测试

在这里插入图片描述
在这里插入图片描述

(4)删除数据

  • 菜鸟教程中的删除方法同样是两种,分别是:
  1. 使用模型类的对象.delete(),返回值:元组,第一个元素为受影响的行数
  2. 使用QuerySet类型数据.delete(),返回值:元组,第一个元素为受影响的行数
  • 这里使用第二种,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(pk__in=[4,5]).delete()
    print(books)
    return HttpResponse('<p>删除成功!</p>')
  • 访问测试,查看mysql数据库

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 注意:
  1. Django删除数据时,会模仿SQL约束ON DELETE CASCADE的行为,也就是删除一个对象时也会删除与他相关联的外键对象
  2. Django()方法是QuerySet数据类型的方法,但并不适用于Manager本身,也就是想要删除所有数据,不能不写all
books=models.Book.objects.delete()  # 报错
books=models.Book.objects.all().delete()   # 删除成功

(5)修改数据

  • 修改数据同样有两种方式,分别是:
  1. - 方法
    模型类的对象.属性 = 更改的属性值
    模型类的对象.save()
          
    - 返回值
    编辑的模型类的对象
    
  2. - 方法
    QuerySet数据类型.update(字段名称=更改的数据)
          
    - 返回值
    整数(受影响的行数)
    
  • 这里使用第二种,实例:
# -*- coding: utf-8 -*-
from statistics import mode
from django.shortcuts import render,HttpResponse
from app1_model import models

def add_book(request):
    #books = models.Book.objects.create(title="Python",price=500,publish="Python出版社",pub_date="1970-12-10")  
    books = models.Book.objects.filter(pk__in=[1,2]).update(price=450)
    print(books)
    return HttpResponse('<p>修改成功!</p>')
  • 访问测试,查看mysql数据库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值