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 makemigrations
    
    django.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
相关推荐
Dmz丶几秒前
前端转 AI 100 天 Day 24:API 测试——用 httpx + pytest 测 FastAPI
python
应用市场4 分钟前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
东莞市云毅网络有限公司19 分钟前
监测问句清单去重:停用词表、数字归一与贪心聚类的参数取法
python·数据清洗·rag·企业知识库·文档解析
雪域迷影37 分钟前
Python Django 7 小时课程
开发语言·python·django
一铭111991 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access
量化吞吐机1 小时前
最高最低都一样,价格就同样集中吗
人工智能·python
FITA阿泽要努力1 小时前
如何调用 LLM 接口
python·api·agent
江湖中的阿龙1 小时前
大模型应用怎么做评测?从样本集、自动评分到上线回归的完整实战
人工智能·python·回归·大模型评测
雾游1 小时前
用上 uv 后,搭建 Python 项目终于顺手了:从安装到环境恢复,一篇讲清
python
范中勤1 小时前
LangGraph Checkpointer 封装(下):with 的双层上下文与 MemorySaver 为什么不用 with
python·大模型·llm·agent·langgraph