Django(8)ORM单表实例(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Django(8)ORM单表实例(一)

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)


  • 当前目录结构


e1ff68dfe7dc427b9bc5055497f7564e.png


二、数据库操作


(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


60854d21b20f4bce84754096fada9273.png

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


b292531294a644c0b4ae80ce0f8b9791.png


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


a2532e20768443a583e6f83281f20275.png


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

a6ab5c6e04994f578cb78d58de24fadb.png


(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


998173928f314bb2a1571771cd079a7d.png

  • 查看具体字段可以使用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>')
  • 访问测试,查看终端输出


8ce7c3904ffd4c179ee83815bea26c83.png

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>')
  • 访问测试,查看终端输出

a263e7c68bd04a1bb5b5bcccf772d93d.png


  • 可以添加多个条件
- 修改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>')

访问测试

cf83ca781f144bc59d0f5cf456963850.png

  • 使用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>')
  • 访问测试

6a169e8137464234a08de29ba93aad27.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
61 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
1月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
58 0
|
3月前
|
数据管理 数据挖掘 调度
Django后端架构开发:URLconf到ORM深度剖析
Django后端架构开发:URLconf到ORM深度剖析
55 1
|
3月前
|
数据库 Python
Django ORM
【8月更文挑战第23天】
43 4
|
3月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
39 0
|
3月前
|
SQL Go 数据库
Django入门到放弃之ORM多表操作
Django入门到放弃之ORM多表操作
|
3月前
|
SQL 关系型数据库 MySQL
Django入门到放弃之ORM单表操作
Django入门到放弃之ORM单表操作
|
4月前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
70 1
|
5月前
|
JSON 缓存 数据库
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
Django ORM的QuerySet:解锁数据库交互的魔法钥匙
|
5月前
|
存储 安全 数据库
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践