当前位置: 首页 > news >正文

Django的模型层

Model模型

模型是你的数据的唯一的、权威的信息源。它包含你所储存数据的必要字段和行为。

通常,每个模型对应数据库中唯一的一张表。

  • 每个模型都是django.db.models.Model的一个Python 子类。
  • 模型的每个属性都表示为数据库中的一个字段。
  • Django 提供一套自动生成的用于数据库访问的API;
  • 这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳

模型与数据库的关系

模型(Model)负责业务对象和数据库的关系映射(ORM)

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

  1. 根据对象的类型生成表结构
  2. 将对象、列表的操作,转换为sql语句
  3. 将sql查询到的结果转换为对象、列表

为什么要用模型?

Model是MVC框架中重要的一部分,主要负责程序中用于处理数据逻辑的部分。通常模型对象负责在数据库中存取数据

它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库

配置Mysql数据库

  1. 登录连接MySQL数据库,并创建数据库mytest。

    create databases mytest default charset=utf8
    
  2. 在Django框架中使用MySQL数据库需要加载 MySQLdb模块,也就是需要安装 mysqlclient,若已经安装请略过。

    $ pip install  mysqlclient
    
  3. 在现有的Django项目中的配置数据库连接信息
    修改settings.py文件中的DATABASE配置项

    DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mytest',#选择数据库的名,请确认你的mysql中有这个库'USER': 'root','PASSWORD': '','HOST': 'localhost','PORT': '3306',}
    }
    

开发流程

  1. 在models.py中定义模型类,要求继承自models.Model

    from django.db import models
    from datetime import datetime# Create your models here.
    class Users(models.Model):#id = models.AutoField(primary_key=True) #主键可省略不写name = models.CharField(max_length=32)age = models.IntegerField(default=20)phone = models.CharField(max_length=16)addtime=models.DateTimeField(default=datetime.now)#class Meta:
    #    db_table = "myapp_users"  # 指定表名
    
  2. 把应用加入settings.py文件的installed_app项
    编辑myweb/settings.py文件,并将项目应用文件名添加到该INSTALLED_APPS设置。

    INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','myapp', #或全称:myapp.apps.MyappConfig
    ]
    
  3. 生成迁移文件

    python3 manage.py makemigrationsdjango.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No mo
    dule named 'MySQLdb'.
    Did you install mysqlclient or MySQL-python?
    安装上面"配置Mysql数据库"的第五步配置,或安装:pip install mysqlclient后就可以了若执行python manage.py makemigrations命令(也可能人比较皮,把migrations文件夹给删了),会提示"No changes detected." 可能有用的解决方式如下:先 python manage.py makemigrations --empty yourappname 生成一个空的initial.py再 python manage.py makemigrations 生成原先的model对应的migration file
    
  4. 执行迁移

    python3 manage.py migrate

相关文章:

  • [图解]产品经理-竞赛题解析:阿布思考法和EA
  • jQuery实现瀑布流
  • css3 笔记01
  • MFC密码对话框之间数据传送实例(源码下载)
  • 打造有情感的AI智能体-情感问答
  • 如何解决0.1+0.2!=0.3的问题
  • 手机上制作证件照
  • gerrit自启动方案—windows服务
  • 1.手动LogisticRegression模型的训练和预测
  • Thinkphp内核开发盲盒商城源码v2.0 对接易支付/阿里云短信/七牛云存储
  • linux系统——top资源管理器
  • Lua 基础 03 常用函数
  • 云端力量:利用移动云服务器高效部署Spring Boot Web应用
  • 等保2.0看这一篇就够了
  • Nginx R31 doc-12-NGINX SSL Termination 安全加密
  • [case10]使用RSQL实现端到端的动态查询
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Angular 2 DI - IoC DI - 1
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • C++类的相互关联
  • ES6系统学习----从Apollo Client看解构赋值
  • ES6之路之模块详解
  • js操作时间(持续更新)
  • mysql_config not found
  • Mysql5.6主从复制
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Tornado学习笔记(1)
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端学习笔记之观察者模式
  • 使用权重正则化较少模型过拟合
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微服务入门【系列视频课程】
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • Semaphore
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​第20课 在Android Native开发中加入新的C++类
  • ​如何防止网络攻击?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #pragma pack(1)
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (3)(3.5) 遥测无线电区域条例
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (十一)c52学习之旅-动态数码管
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)C#调用WebService 基础
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • 、写入Shellcode到注册表上线
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 成都线下面基会拉开序幕