Django(8)ORM单表实例

2023-05-16

文章目录

  • 一、Django ORM 单表实例
    • 创建新模型
  • 二、数据库操作
    • (1)添加数据
    • (2)查找数据
      • - filter()
      • - exclude()
      • - get()
      • - order_by()
      • - reverse()
      • - count()
      • - first()
      • - last()
      • - exists()
      • - values()
      • - values_list()
      • - distinct()
    • (3)exclude()和filter()的条件查询
      • __in
      • __gt
      • __gte
      • __lt
      • __lte
      • __range
      • __contains
      • __icontains
      • __startswith
      • __endswith
      • __year
      • __month
      • __day
    • (4)删除数据
    • (5)修改数据

此文章参考菜鸟教程: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数据库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django(8)ORM单表实例 的相关文章

随机推荐

  • Updating crates.io index 速度慢的解决办法

    Rust社区公开的第三方包都集中在crates io网站上面 xff0c 他们的文档被自动发布到doc rs网站上 Rust提供了非常方便的包管理器cargo xff0c 它类似于Node js的npm和Python的pip 但cargo不
  • SecureCRT 密码解密

    SecureCRT xff08 8 以上 xff09 配置的密码存放在 Config Sessions下面的ini文件中 xff0c 内容如下 xff1a S Username 61 S Monitor Password V2 61 S P
  • AD10 四层板经验(层的性质)

    层的性质 xff1a 内部层有两种 xff1a plane和layer xff0c 他们的区别如下 xff1a plane是所有Layer的其中一个 xff0c Layer是指层 xff0c 例如有常见的信号层Signal Layers 顶
  • Centos7下httpd最新版本安装或者更新至最新版本

    查找Centos上软件库里的httpd版本 yum info httpd yum info httpd 已加载插件 xff1a fastestmirror Loading mirror speeds from cached hostfile
  • 修改git远程仓库地址

    由于git仓库的地址发生了变化 xff0c 需要修改仓库地址才能push 查看本地工程git仓库关联的远程仓库地址 xff1a span class token function git span remote v 删除本地关联的远程仓库地
  • INSTALL_FAILED_NO_MATCHING_ABIS 的解决办法

    在Android模拟器上安装apk的时候出现 xfeff xfeff INSTALL FAILED NO MATCHING ABIS 这个错误提示的解决办法 是由于使用了native libraries 该native libraries
  • IntelliJ IDEA 控制台中文乱码

    1 预热 刚刚接触IntelliJ IDEA几天 xff0c 在易用性方面的确比Eclipse好很多 xff0c 比较智能 xff0c 各种插件 工具都已经集成 xff0c 和Mac OS X类似 开箱即用 但是还是老大难问题 中文乱码 x
  • unable to start the monitor on 4454 ,an other instance is problaly using the same port

    在打开idea studio后 xff0c 再打开android studio xff0c 或者反过来 xff0c 打开项目的时候就会报 xff1a unable to start the monitor on 4454 xff0c an
  • windows中为cmd设置代理

    在CMD环境下设置代理可能不是很常用 xff0c 但是某些情况下还是可能会用到 xff0c 比如有些资源网站被墙了 xff0c 此时你如果想访问这些资源时 xff0c 只能通过代理来访问相应的资源 xff0c 而你需要在CMD环境下下载墙外
  • version `GLIBCXX_3.4.21' not found 解决办法

    在安装cmake3 5 1运行 bootstrap的时候出现如下提示 xff1a gmake cmake 是最新的 span class hljs header usr soft cmake 3 5 1 Bootstrap cmk cmak
  • Oracle死锁查询及处理

    一 数据库死锁的现象 程序在执行的过程中 xff0c 点击确定或保存按钮 xff0c 程序没有响应 xff0c 也没有出现报错 二 死锁的原理 当对于数据库某个表的某一列做更新或删除等操作 xff0c 执行完毕后该条语句不提 交 xff0c
  • Ubuntu 18.04添加中文输入法

    找到设置 xff1a 点击 Manager Installed Languages 出现下图提示 xff1a Keyboard input method system 里面有Ibus XIM fcitx none 三种输入架构 xff0c
  • KEIL问题【打开文件太多造成任何按钮都不可点】【Keil4 编译时出现RL-ARM is not allowed with this license 】【 局部变量仿真显示not in scope】

    SYD8801是一款低功耗高性能蓝牙低功耗SOC xff0c 集成了高性能2 4GHz射频收发机 32位ARM Cortex M0处理器 128kB Flash存储器 以及丰富的数字接口 SYD8801片上集成了Balun无需阻抗匹配网络
  • Django(2)模板、标签

    文章目录 一 使用Django模板修改页面二 Django模板标签 变量 列表 字典 过滤器1 default2 length3 filesizeformat4 date5 truncatechars6 safe if else标签 for
  • Django(3)模型

    文章目录 一 Django 模型 ORM二 数据库配置三 定义模型 xff08 创建数据表 xff09 四 数据库基本操作 插入数据 获取数据 xff08 1 xff09 查询所有的数据行 xff08 2 xff09 where条件查询 x
  • Django(4)表单

    文章目录 一 概述二 GET方法三 POST方法四 Request对象五 QueryDict对象 此文章参考菜鸟教程 xff1a Django 表单 菜鸟教程 runoob com Django版本 xff1a span class tok
  • Django(5)视图

    文章目录 一 视图概述二 请求对象HttpRequest xff08 1 xff09 GET xff08 2 xff09 POST xff08 3 xff09 body xff08 4 xff09 path xff08 5 xff09 me
  • Django(6)路由

    文章目录 一 路由概述二 正则路径中的分组 xff08 1 xff09 正则路径中的无名分组 xff08 2 xff09 正则路径中的有名分组 xff08 3 xff09 路由分发 三 反向解析 xff08 使用reverse xff09
  • Django(7)Admin管理工具

    文章目录 一 概述二 使用管理工具 xff08 1 xff09 激活管理工具 xff08 2 xff09 使用管理工具 xff08 3 xff09 复杂模型 xff08 4 xff09 自定义表单 xff08 5 xff09 内联 xff0
  • Django(8)ORM单表实例

    文章目录 一 Django ORM 单表实例创建新模型 二 数据库操作 xff08 1 xff09 添加数据 xff08 2 xff09 查找数据 filter exclude get order by reverse count firs