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

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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天前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
20天前
|
JSON API 数据格式
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用
|
18天前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。
|
24天前
|
关系型数据库 MySQL 数据库连接
数据迁移到 Django 模型表:详尽指南
数据迁移是许多应用程序开发过程中必不可少的一部分。在这篇文章中,我们将详细分析和总结如何通过一个定制的 Django 管理命令,将数据从 MySQL 数据库迁移到 Django 模型表中。这种方法可以确保数据在多个数据库之间有效且安全地迁移,同时避免了手动操作的繁琐和错误。
|
20天前
|
存储 SQL 数据处理
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
Django ORM实战:模型字段与元选项配置,以及链式过滤与QF查询详解
|
20天前
|
数据库 开发者 Python
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
Django ORM入门指南:从概念到实践,掌握模型创建、迁移与视图操作
|
20天前
|
前端开发 数据库 Python
Django入门全攻略:从零搭建你的第一个Web项目
Django入门全攻略:从零搭建你的第一个Web项目
|
1月前
|
Linux 数据库管理 Python
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
191 4
|
1月前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
1月前
|
前端开发 JavaScript 数据安全/隐私保护
计算机Python项目|django学生成绩管理系统
计算机Python项目|django学生成绩管理系统