Django自学笔记 4-1 模型(Models)初步介绍+更新模型到数据库

快速上手Django(二) Django 根据模型(models)生成更新数据库表make migrations Django 根据模型(models)生成更新数据库表make migrations 阅读详情

————总目录——前言——框架版本————

======================= 大爽歌作,made by big shuang =======================

参考:https://docs.djangoproject.com/en/2.2/topics/db/models/

一、模型(Models)介绍

1 介绍

模型是关于数据的唯一、确定的信息源。它包含存储数据的基本字段和行为。通常,每个模型映射到一个数据库表。

以上是官方文档的介绍,但对于初学者,这太绕了,
粗略的讲:
建立一个模型(Model)相当于建立了一个数据库表(table)。
模型规定属性,就是数据库表规定字段(field)。
每用模型类建立一个实例,都是在数据库表里插入一条数据。
准确地讲,可以这么理解模型:

  1. 每个数据库表,都是用来记录一种事物的数据信息的,比如学生表,是用来记录学生这种对象的多个维度的信息。每个信息维度(比如姓名、性别、生日、邮箱、学号)对应数据库表的一个字段。
  2. 对于学生这种对象,我们可以建立一个模型类(Model),模型的每个属性对应学生一个信息维度(比如姓名、性别、生日、邮箱、学号)。
  3. 数据库表的每一行,都是一个具体的学生的信息,对应也就是模型类(Model)的一个实例。

2 示例

以简单的教务管理系统中的学生这种对象为例,
首先,我们分析出该对象需要的属性:

  • 姓名(name)
  • 性别(gender)
  • 生日(birthday)
  • 邮箱(email)
  • 个人简介(info)
  • 年级(grade)
  • 年级子学号(number)
  • 密码(password)

同时,一个学生能由年级+年级子学号唯一确定,则年级+年级子学号为其主键。

那么其model的示例写法如下

from django.db import models


class Student(models.Model):
    gender = [
        ("m", "男"),
        ("f", "女")
    ]

    name = models.CharField(max_length=50, verbose_name="姓名")
    gender = models.CharField(max_length=10, choices=gender, default='m', verbose_name="性别")
    birthday = models.DateField(verbose_name="生日")
    email = models.EmailField(verbose_name="邮箱")
    info = models.CharField(max_length=255, verbose_name="个人简介", help_text="一句话介绍自己,不要超过250字")

    grade = models.CharField(max_length=4, verbose_name="年级")
    number = models.CharField(max_length=6, verbose_name="年级子学号")
    password = models.CharField(max_length=30, verbose_name="密码")

    class Meta:
        constraints = [
            # 复合主键:保证 grade和number组合的student_id唯一
            models.UniqueConstraint(fields=['grade', 'number'], name='student_id'),
        ]

具体的代码意思,我们在本章下一小节详细说明。

3 更新到数据库

在django框架下,并不是添加好模型(model)就万事大吉了
添加好模型后,我们还需要手动执行脚本,才能根据模型生成对应的数据库表。
在项目文件夹下,打开命令行,按行依次执行:

python manage.py makemigrations
python manage.py migrate

解释下上面这两句的作用
其中第1句会生成对应的迁移(migrations)命令。
如果是第一次运行的项目,由于是
那么会在./your_app/migrations文件夹下,
生成0001_initial.py用于记录迁移(migrations)命令
第一次运行也会在项目文件夹下,生成一个空的 database:db.sqlite3
第2句会执行第一句中生成的迁移(migrations)命令。
执行完第二句,改动才真正更新到数据库文件了。

当然,实际上,数据库中的改动并不是简单的添加了这一个模型的事,有兴趣的朋友可以打开此时的db.sqlite3看看。无法直接打开,需要使用对应的软件,我一般用DB Browser (SQLite),里面生成了很多个表,不过这个细说起来就复杂了。

以后我们如果修改了模型的属性之类,也要执行上面两句脚本去更新对应的数据库表。

Django更新models数据库结构 有时候在我们使用Django设计了models中的数据库结构,并且已经同步了数据库之后,我们突然想在数据表中更新或者增加新的字段,也就是需要修改数据库的结构,会出现以下的问题: C:\Users\Administrator\Desktop\Web开发\Django_Demo\jkxy>python manage.py makemigrations You are trying to ad... 阅读详情

相关推荐

Django模型(Models):1、字段及属性

简介 模型是一个用于表示数据的Python类,包含基本的数据字段和行为,在Django中,通常一个模型就代表一个数据库表。 模型集成自django.db.models.Model,模型的每一个属性代表一个数据表的列。 举例介绍 在models.py文件中创建一个Person模型: from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = mo

未来来 1231

Django拆分models.py为多个文件

别问我为啥闲的去拆modes.py这种问题, 因为要分类,便于后期表维护

4年Python老司机|从2.8版本卷到3.13 真正的全栈是:能用Vue写前端,能用Python调参,还能用Redis解决人生选择困难症 1258

Django从Models 10分钟建立一套RestfulApi

ddd

临渊-测试开发 728

Django 更新数据 save()方法

【代码】Django 更新数据 save()方法。

人生苦短,何妨一试 1466

Django 4.x Models CRUD(增、删、改、查)函数方法

Django是一个强大且灵活的Python Web框架,它允许快速开发安全、可维护的Web应用程序。在Django中,模型(models)是应用程序的核心,它用于定义和操作数据库中的数据。在Web应用的开发过程中,通常需要执行增(Create)、查(Retrieve)、改(Update)、删(Delete)等操作,这些操作合称为CRUD操作。掌握这些基本操作是学习和使用Django的关键一步。

Mr数据杨 3万+

Django更新models数据库结构步骤

主要介绍了Django更新models数据库结构的操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Django Models详解:数据库模型的核心

本文系统介绍了Django框架中的models模块,它是实现ORM(对象关系映射)的核心组件。主要内容包括:模型的基础定义与创建、丰富的字段类型和选项配置、三种模型关系(一对一、一对多、多对多)的实现方式、Meta元类配置、自定义模型方法以及强大的查询操作API(基本查询、链式查询、聚合查询等)。文章还介绍了模型迁移流程,并推荐了深入学习的路径。通过掌握这些知识,开发者可以高效地构建数据库结构并实现复杂的数据操作,充分发挥Django ORM的优势。

这里是 「Py玩家的栈与星辰」,专注分享Python开发、DevOps实践、云原生技术与系统安全领域的深度干货。 1519

WorkVisual传输程序报错_发现一个内部错误

WorkVisual传输程序报错_发现一个内部错误

qq_16401025的博客 2457

如何使用Django模型Models对数据库进行增删改查

Django的抽象模型Models可以直接对数据库进行增删改查,不需要你自己写SQL语言来进行相关数据库操作。今天我们就以博客blog为例,看下Django是如何对数据库进行增删改查的。我们将会用到如下这个简单的Article模型:from django.db import modelsclass Article(models.Model): title = models.CharFiel...

大江狗 1万+

Excel插件开发实战:从零封装一个带自定义Ribbon的.xlam工具包

本文详细介绍了如何从零开发一个带自定义Ribbon的Excel插件.xlam工具包。通过VBA和XML技术,读者将学习到插件架构设计、Ribbon界面定制、模块化开发以及企业级部署策略,帮助提升Excel自动化办公效率。

weixin_42531128的博客 516

大地坐标系与经纬度转换(一):大地坐标系简介

一、大地坐标系 大地坐标系是大地测量中以参考椭球面为基准面建立起来的坐标系。地面点的位置用大地经度、大地纬度和大地高度表示。 二、地心坐标系 ...

qq_42895926的博客 6万+

Django中models模型(操作数据库)

ORM自己创建数据库连接数据库Django操作表数据库操作新建删除获取数据实例:用户管理 Django开发操作数据库更简单,内部提供了ORM框架 ORM的流程 ORM ORM,全称 Object Relational Mapping (对象关系映射),通过 ORM 我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性, ORM 在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。 每个模型都是一个 Python 的类,这些类继承 d.

她叫常玉莹 5373

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨

zilan23的博客 3648

django db models探索

一、django db models结构 django db models 属于django db的一部分。主要包括四部分: 1. models 2. querySet 3. query 4. manager     1. models。 models定义在djang/db/models/base.py中,一些比较重要的类: ModelBase ModelBase是...

SAN_YUN的专栏 500

Could not find a package configuration file provided by “boost_signals“

gmapping/slam_gmapping/gmapping/CMakeLists.txt:14 (find_package)问题在14行,注释该行。,该语句的用以为告诉项目Boost库文件所在。

weixin_72050316的博客 1027

Apifox接口测试+自动化测试

Apifox 接口测试+自动化测试快速入门!

程序员小杨哥的博客 1万+

django修改models.py后同步更新到数据库

一般在django项目的models.py中写了新的数据库类以后,都用: python manage syncdb 来同步生成数据库。   但是如果修改了已同步的数据库类,则此命令无效。 django的设计原则是,对于包含数据的表的维护,一般是手工来做的。   虽然django有一个命令: django-admin.py reset appn

gu_jin_xiao的专栏 3490

华为OD新系统真题-最小极差分组(C/C++/Py/Java/Js/Go)

华为OD机试 新系统真题【最小极差分组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小极差分组】多语言题解。

qq_45776114的博客 588

【Web应用开发笔记】Django笔记4-1:简单使用 Django 与本地数据库

通过一个简单的项目来了解 Django 使用数据库的过程。此外还涉及:Django 内置的后台管理工具。需要在我的前几篇博客的基础上进行。

ding_zhikai的博客 1116

4、LTE无人机认证:保障通信安全的新方案

本文针对LTE网络中无人机通信存在的安全风险,提出了一种基于可信第三方GCS的新型认证协议。该协议通过非对称加密和哈希函数保护IMSI等敏感信息,防止身份泄露、中间人攻击、拒绝服务攻击和位置追踪等威胁。利用Scyther工具对协议进行形式化分析,验证了其在机密性、一致性和活性等方面的安全属性,证明该方案能有效提升无人机在LTE网络中的通信安全性与隐私保护能力。

pink的博客 61

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

django数据库的定义模型类

定义模型类模型类被定义在"子应用/models.py"文件中。模型类必须直接或者间接继承自django.db.models.Model类。接下来以学生管理为例进行演示。在models.py 文件中定义模型类。

2301_80678122的博客 891

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Django笔记(五):模型models

player.py每个模型需要继承models类,如上Player模型定义了一个整形字段idx。常见字段类型有:字段描述整形FloatField浮点型CharField字符串类型TextField长文本类型布尔类型参数取值描述nullTrue/False是否为空uniqueTrue/False字段是否唯一defaultauto字段默认值max_lengthint字段最大长度True/False是否为主键。

垃圾管理员的垃圾站 1216

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【django】Django Models 使用知识

在 Django 中,模型是通过继承类来定义的。每个模型类的属性对应数据库表中的字段。定义模型:通过继承类定义模型。数据库迁移:使用和migrate命令将模型同步到数据库。数据操作:使用 ORM 提供的查询 API 进行增删改查。字段选项nullblankuniquechoices等提供了字段的额外配置。关联关系:Django 提供了ForeignKey和来处理数据库表之间的关系。模型方法与自定义管理器:可以在模型中定义自定义方法或管理器,简化查询操作。

qq_59344127的博客 811

Django模型信号——django.db.models.signals

目录 一、监听信号 1.接收器函数¶ 2.连接接收器函数¶ 3.连接到特定发送器发送的信号¶ 4.防止重复信号¶ 二、定义和发送信号 1.定义信号¶ 2.发送信号¶ 三、断开信号¶ Django 包含一个“信号调度器”,它帮助已解藕的应用程序在框架中的其它地方发生操作时可以得到通知。简而言之,信号允许某些发送器通知一组接收器某些操作已经发生。当许多代码段可能对同一事件感兴趣时,它们特别有用。 Django 提供了内置信号集使用户代码能够获得 Django 自身某些操作的通知...

黎明总是如期而至 1334

Django的models.model如何使用

Django 模型是 Python 类,继承自类,每个模型类都对应数据库中的一张表。模型类的属性定义了表的字段(列),并可以通过各种方法对表中的数据进行操作(如添加、删除、修改和查询)。在 Django 中,你通常会在应用的models.py文件中定义模型类。每个字段都是一个Field类型,Django 会自动为每个字段创建数据库表的相应列。name = models.CharField(max_length=100) # 坦克的名字。

2302_76774649的博客 2233

Django手动删除数据库表后同步models的解决方案

第一次使用Django的测试model使用时,不小心手动删除mysql数据库中的表,再使用django中的model类报很多错误。网上查询了一些解决方法,大部分都说删除0001_inital.py文件(与数据库表的映射关系),但是仅对python manage.py makemigrations有用。下面以例子阐述完整解决办法。 1.创建models模型和数据库表 web模块下models.p...

Wonder ZH 2728
上一篇: Django自学笔记 2-1 URL与View关系
下一篇: Django自学笔记 3-1 模板(Template)基础
大爽歌
博客等级 码龄9年 422粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值