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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS Agent(兼容OpenClaw),2核4GB
简介: 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岁的


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
10月前
|
SQL 存储 数据库
Django模型查询与性能调优:告别N+1问题
本文详解Django数据库查询基础与优化技巧,涵盖QuerySet使用、关联查询(一对多/多对多)、N+1查询问题及解决方案(select_related、prefetch_related)、高级查询方法及项目实战中的数据权限控制实现。
417 0
|
11月前
|
存储 数据库 Python
Django模型关系:从一对多到多对多全解析
本文详解Django模型关系:一对多(ForeignKey)及多对多(ManyToManyField)关系的定义、操作与优化技巧。同时探讨外键约束的使用场景与权衡策略。
658 0
|
11月前
|
存储 关系型数据库 MySQL
Django模型开发:模型字段、元数据与继承全方位讲解
本文将全面介绍 Django 模型的关键知识点,包括模型字段类型、映射、常用配置选项以及模型继承等高级特性,帮助开发者快速掌握模型设计与使用技巧。
385 0
|
Java API 数据库
Django:从入门到精通
【11月更文挑战第18天】Django是一个由Python编写的高级Web应用框架,以其简洁性、安全性和高效性而闻名。Django最初由Adrian Holovaty和Simon Willison于2003年开发,旨在简化Web应用的开发过程。作为一个开放源代码项目,Django迅速吸引了大量的开发者和用户,成为了Python Web开发领域的重要工具之一。
435 1
|
机器学习/深度学习 前端开发 网络架构
Django如何调用机器学习模型进行预测
Django如何调用机器学习模型进行预测
425 5
|
机器学习/深度学习 算法 搜索推荐
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
250 4
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
283 0
|
12月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
629 1
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
943 45
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
910 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面