Django入门-5:模型的基本使用1-模型定义

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Django入门-5:模型的基本使用1-模型定义

       Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。


ORM简介

  1. MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,
  2. 通过简单的配置就可以轻松更换数据库
  3. ORM是“对象-关系-映射”的简称,主要任务是:
  1. 根据对象的类型生成表结构
  2. 将对象、列表的操作,转换为sql语句
  3. 将sql查询到的结果转换为对象、列表
  1. 这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
  2. Django中的模型包含存储数据的字段和约束,对应着数据库中唯一的表


image.png

使用MySql数据库

  • 在虚拟环境中安装mysql包
  1. pip install mysql-python
  • 在mysql中创建数据库
  1. create databases test2 charset=utf8
  • 打开settings.py文件,修改DATABASES项
  1. DATABASES = {
  2.    'default': {
  3.        'ENGINE': 'django.db.backends.mysql',
  4.        'NAME': 'test2',
  5.        'USER': '用户名',
  6.        'PASSWORD': '密码',
  7.        'HOST': '数据库服务器ip,本地可以使用localhost',
  8.        'PORT': '端口,默认为3306',
  9.    }
  10. }


开发流程

  1. 在models.py中定义模型类,要求继承自models.Model
  2. 把应用加入settings.py文件的installed_app项
  3. 生成迁移文件
  4. 执行迁移生成表
  5. 使用模型类进行crud操作

使用数据库生成模型类

  1. python manage.py inspectdb > booktest/models.py


定义模型

  1. 在模型中定义属性,会生成表中的字段
  2. django根据属性的类型确定以下信息:
  1. 当前选择的数据库支持字段的类型
  2. 渲染管理表单时使用的默认html控件
  3. 在管理站点最低限度的验证
  1. django会为表增加自动增长的主键列,每个模型只能有一个主键列,
  2. 如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列


属性命名限制

  • 不能是python的保留关键字
  1. name 是合法的,student_name 也合法,
  2. 但是student__name不合法,try, class, continue 也不合法,
  3. 因为它是Python的关键字( import keyword; print(keyword.kwlist) 可以打出所有的关键字)

  • 由于django的查询方式,不允许使用连续的下划线
  1. 字段中不能有 __(双下划线,
  2. 因为在Django QuerySet API中有特殊含义
  3. (用于关系,包含,不区分大小写,以什么开头或结尾,日期的大于小于,正则等)

示例:

  1. from django.db import models
  2. classPerson(models.Model):
  3.    name = models.CharField(max_length=30)
  4.    age = models.IntegerField()
  5.    
  6.    def__unicode__(self):
  7.    # 在Python3中使用 def __str__(self):
  8.        return self.name

新建一个对象的方法有以下几种:

  1. Person.objects.create(name=name,age=age)
  2. p = Person(name="WZ", age=23)
  3. p.save()
  4. p = Person(name="TWZ")
  5. p.age = 23
  6. p.save()
  7. Person.objects.get_or_create(name="WZT", age=23)
  8. 这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为TrueFalse,
  9. 新建时返回的是True, 已经存在时返回False.

获取对象有以下方法:


  1. Person.objects.all()
  2. Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存
  3. Person.objects.get(name=name)
  4. get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
  5. Person.objects.filter(name="abc")  # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
  6. Person.objects.filter(name__iexact="abc")  # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
  7. Person.objects.filter(name__contains="abc")  # 名称中包含 "abc"的人
  8. Person.objects.filter(name__icontains="abc")  #名称中包含 "abc",且abc不区分大小写
  9. Person.objects.filter(name__regex="^abc")  # 正则表达式查询
  10. Person.objects.filter(name__iregex="^abc")  # 正则表达式不区分大小写
  11. filter是找出满足条件的,当然也有排除符合某条件的
  12. Person.objects.exclude(name__contains="WZ")  # 排除包含 WZ 的Person对象
  13. Person.objects.filter(name__contains="abc").exclude(age=23)  # 找出名称含有abc, 但是排除年龄是23岁的


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
19天前
|
测试技术 API 数据库
Django测试入门:打造坚实代码基础的钥匙
Django测试入门:打造坚实代码基础的钥匙
30 3
|
2月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
12天前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
|
8天前
|
存储 数据库 开发者
Django Web架构:全面掌握Django模型字段(下)
Django Web架构:全面掌握Django模型字段(下)
21 2
|
10天前
|
前端开发 网络协议 物联网
Django Web:搭建Websocket服务器(入门篇)
Django Web:搭建Websocket服务器(入门篇)
21 1
|
5天前
|
SQL 关系型数据库 MySQL
如何创建 Django 模型
如何创建 Django 模型
8 0
|
8天前
|
存储 数据处理 数据库
Django Web架构:全面掌握Django模型字段(上)
Django Web架构:全面掌握Django模型字段(上)
10 0
|
2月前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。
|
12天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
12天前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。