1. 模型简介

ORM 简介

MVC 框架中一个重要的部分就是 ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。即直接面向对象操作数据,无需考虑 sql 语句

ORM 是“对象-关系-映射”的简称,主要任务是:

  • 根据对象的类型生成表结构。
  • 将对象(或对象列表)的操作,转换为 sql 语句。
  • 将 sql 查询到的结果转换为对象(或对象列表)。

这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动。

Django 中的模型包含了存储数据的字段和约束,对应着数据库中唯一的表。

 

使用 Mysql 数据库的环境配置

创建数据库

create databases modeldemo charset=utf8

打开应用的 settings.py 文件,修改 DATABASES 项:

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'modeldemo',  # 使用的Mysql库名'USER': '用户名','PASSWORD': '密码','HOST': '数据库服务器ip,本地可以使用localhost','PORT': '端口,默认为3306',}
}

安装 python mysql API

python3
pip install pymysql 

且要在项目的 __init__.py 中添加:

import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)  # 指定版本。在出现“mysqlclient 1.4.0 or newer is required; you have 0.9.3.”报错时加上此行
pymysql.install_as_MySQLdb()

否则会出现报错:Error loading MySQLdb module: No module named 'MySQLdb'。

python2(已废弃,基本不用,可以不考虑)
pip install MySQL-python

且不需要在 __init__.py 中添加上述代码。

开发流程

  1. 在 models.py 中定义模型类,要求继承自 models.Model。
  2. 把应用加入 settings.py 文件的 installed_app 项。
  3. 迁移:生成迁移文件;执行迁移并生成表(迁移的目的是映射模型类与表。如果模型类与表的映射关系已存在,则无需迁移)。
  4. 使用模型类进行 crud(增删改查)操作。

 

2. 定义模型

在模型中定义属性,会生成表中的字段。

Django 根据属性的类型确定以下信息:

  • 当前选择的数据库支持字段的类型(核心)。
  • 渲染管理站点表单时使用的默认 html 控件。
  • 在管理站点最低限度的验证。

Django 会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则 Django 不会再生成默认的主键列。

属性命名限制:

  • 不能是 python 的保留关键字。
  • 由于 Django 的查询方式,不允许带有连续的下划线。

 

1)定义属性

定义属性时,需要明确字段类型。字段类型被定义在 django.db.models.fields 目录下,为了方便使用,被导入到了 django.db.models 中。

使用方式:

from django.db import models

通过 models.Field 创建字段类型的对象,赋值给属性。如:

title = models.CharField(max_length=20)

若想对重要数据都做逻辑删除而不做物理删除,实现方法是定义 isDelete 属性,类型为 BooleanField,默认值为 False。

 

2)字段类型

  • AutoField:一个根据实际 id 自动增长的 IntegerField,通常不指定。
    • 如果不指定,一个主键字段将自动添加到模型中。
  • BooleanField:true/false 字段,此字段的默认表单控制是 CheckboxInput。
  • NullBooleanField:支持 null、true、false 三种值。
  • CharField(max_length=最大字符长度):字符串,默认的表单样式是 TextInput。
  • TextField:大文本字段,一般超过 4000 字符时使用,默认的表单控件是 Textarea。
  • IntegerField:整数。
  • DecimalField(max_digits=None, decimal_places=None):使用 python 的 Decimal 实例表示的十进制浮点数。
    • DecimalField.max_digits:位数总数。
    • DecimalField.decimal_places:小数点后的数字位数。
  • FloatField:用 python 的 float 实例来表示的浮点数。
  • DateField[auto_now=False, auto_now_add=False]):使用 python 的 datetime.date 实例表示的日期。
    • 参数 DateField.auto_now:每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为 false。
    • 参数 DateField.auto_now_add:当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为 false。
    • 该字段默认对应的表单控件是一个 TextInput. 在管理员站点添加了一个 JavaScript 写的日历控件,和一个“Today"的快捷按钮,包含了一个额外的 invalid_date 错误消息键。
    • auto_now_add, auto_now, and default 这些设置是相互排斥的,他们之间的任何组合将会发生错误的结果。
  • TimeField:使用 python 的 datetime.time 实例表示的时间,参数同 DateField。
  • DateTimeField:使用 python 的 datetime.datetime 实例表示的日期和时间,参数同 DateField。
  • FileField:一个上传文件的字段。
  • ImageField:继承了 FileField 的所有属性和方法,但对上传的对象进行校验,确保它是个有效的 image。

 

3)字段选项

通过字段选项,可以实现对字段的约束。实现方式是通过字段对象的关键字参数指定。

  • null:如果为 True,Django 将空值以 NULL 存储到数据库中,默认值是 False。
  • blank:如果为 True,则该字段允许为空白,默认值是 False。
    • 对比:null 是数据库范畴的概念,blank 是表单验证证范畴的。
  • db_column:字段的名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90992.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90992.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/90992.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Hadoop RPC:技术细节与推广应用

Hadoop RPC框架概述在分布式系统的核心架构中,远程过程调用(RPC)机制如同神经网络般连接着各个计算节点。Hadoop作为大数据处理的基石,其自主研发的RPC框架不仅支撑着内部组件的协同运作,更以独特的工程哲学诠释了分布…

为什么玩游戏用UDP,看网页用TCP?

故事场景:两种不同的远程沟通方式假设你需要和远方的朋友沟通一件重要的事情。方式一:TCP — 打一个重要的电话打电话是一种非常严谨、可靠的沟通方式。• 1. 建立连接 (三次握手):• 你拿起电话,拨号(SYN)。• 朋友那…

【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔(二)

High-Fidelity Texture Transfer Using Multi-Scale Depth-Aware Diffusion 这篇文章可以从一个带有纹理的几何物体出发,将其身上的纹理自动提取并映射到任意的几何拓扑结构上(见下图红线左侧);或者从一个白模几何对象出发&#x…

深度学习图像分类数据集—玉米粒质量识别分类

该数据集为图像分类数据集,适用于ResNet、VGG等卷积神经网络,SENet、CBAM等注意力机制相关算法,Vision Transformer等Transformer相关算法。 数据集信息介绍:玉米粒质量识别分类:[crush, good, mul] 训练数据集总共有3…

Unity VR手术模拟系统架构分析与数据流设计

Unity VR手术模拟系统架构分析与数据流设计 前言 本文将深入分析一个基于Unity引擎开发的多人VR手术模拟系统。该系统采用先进的网络架构设计,支持多用户实时协作,具备完整的手术流程引导和精确的工具交互功能。通过对系统架构和数据管道的详细剖析&…

【Spring Boot】Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册

Spring Boot 4.0 的颠覆性AI特性全景解析,结合智能编码实战案例、底层架构革新及Prompt工程手册一、Spring Boot 4.0 核心AI能力矩阵二、AI智能编码插件实战(Spring AI Assistant)1. 安装与激活2. 实时代码生成场景3. 缺陷预测与修复三、AI引…

audiobookshelf-web 项目怎么运行

git clone https://github.com/audiobookshelf/audiobookshelf-web.git cd audiobookshelf-web npm i 启动项目 npm run dev http://localhost:3000/

扫描文件 PDF / 图片 纠斜 | 图片去黑边 / 裁剪 / 压缩

问题:扫描后形成的 PDF 或图片文档常存在变形倾斜等问题,手动调整颇为耗时费力。 一、PDF 纠斜 - Adobe Acrobat DC 1、所用功能 扫描和 OCR: 识别文本:在文件中 → 设置 确定后启动扫描,识别过程中自动纠偏。 2、…

适配器模式:兼容不兼容接口

将一个类的接口转换成客户端期望的另一个接口,解决接口不兼容问题。代码示例:// 目标接口(客户端期望的格式) interface ModernPrinter {void printDocument(String text); }// 被适配的旧类(不兼容) class…

流程控制:从基础结构到跨语言实践与优化

流程控制 一、流程控制基础概念与核心价值 (一)流程控制定义与本质 流程控制是通过特定逻辑结构决定程序执行顺序的机制,核心是控制代码运行路径,包括顺序执行、条件分支、循环迭代三大核心逻辑。其本质是将无序的指令集合转化为有…

Http与Https区别和联系

一、HTTP 详解 HTTP(HyperText Transfer Protocol)​​ 是互联网数据通信的基础协议,用于客户端(浏览器)与服务器之间的请求-响应交互 核心特性​​: 1.无连接(Connectionless)​​…

飞算JavaAI:开启 Java 开发 “人机协作” 新纪元

每日一句 明天是新的一天, 你也不再是昨天的你。 目录每日一句一、需求到架构:AI深度介入开发“源头设计”1.1 需求结构化:自然语言到技术要素的精准转化1.2 架构方案生成:基于最佳实践的动态适配二、编码全流程:从“…

Qt项目锻炼——TODO(五)

发现问题如果是自己创建的ui文件,怎么包含进自己的窗口类并且成为ui成员?一般来说Qt designer 会根据你.ui文件生成对应的ui_文件名这个类(文件名是ui文件名),它包含了所有 UI 组件(如按钮、文本框、标签等…

Vue框架之模板语法全面解析

Vue框架之模板语法全面解析一、模板语法的核心思想二、插值表达式:数据渲染的基础2.1 基本用法:渲染文本2.2 纯HTML渲染:v-html指令2.3 一次性插值:v-once指令三、指令系统:控制DOM的行为3.1 条件渲染:v-if…

从零开始的语言模型构建 CS336 第一课(一)

语言模型的发展历史 🏗 Early foundation models (2010年代后期) 2018:ELMo(基于 LSTM 预训练 微调)[Peters 2018]2018:BERT(基于 Transformer 预训练 微调)[Devlin 2018]2019:G…

微信获取access_token授权的两种不同情况

1.网页授权:需要页面调用授权的sdk,首先需要获取到code参数 (A.网页版的获取code参考另一篇文章:https://blog.csdn.net/ettamei/article/details/148763361?spm1011.2415.3001.5331 B.前端sdk提供:code只有5分钟的有…

达梦数据库windows静默安装

<DATABASE> <!-- 安装数据库的语言配置&#xff0c;简体中文版: ZH&#xff0c;繁体中文版: CHT&#xff0c;英文版: EN&#xff0c;不区分大小写。不允许为空 --> <LANGUAGE>ZH</LANGUAGE> <!-- 安装程序的时区配置&#xff0c;缺省为08:00&#…

20250709荣品RD-RK3588开发板的Android13系统下修改为连续长按10s开机

20250709荣品RD-RK3588开发板的Android13系统下修改为连续长按10s开机 2025/7/9 10:11缘起&#xff1a;由于荣品RD-RK3588开发板使用的PMIC是RK806。 以前在荣品PRO-RK3566开发板上使用的PMIC是RK809上做过了长按开机的。 直接迁移过来了&#xff01;1、根据RK809的DATASHEET&a…

20250713-`Seaborn.pairplot` 的使用注意事项

Seaborn.pairplot 的使用注意事项 sns.pairplot 是 Seaborn 中最常用、最强大的探索性数据分析&#xff08;EDA&#xff09;函数之一。 它在一个调用里就能同时展示&#xff1a; 任意两两变量间的 散点图&#xff08;观察关系、聚类、异常值&#xff09;对角线上每个变量的 单…

如何选择合适的AI论文写作工具?七个AI英文论文写作网站

在写作英文论文时&#xff0c;许多人往往会遇到写作思路卡壳、语言不流畅、重复率过高等问题。幸运的是&#xff0c;AI论文写作工具的出现&#xff0c;极大地提升了写作效率和质量。这些工具不仅可以帮你快速生成内容、扩展论点&#xff0c;还可以优化语言&#xff0c;帮助你顺…