Model 模型

本文详细介绍了Django中的ORM模型,包括配置数据库、模型字段与选项、定义模型、模型操作与测试,以及各种查询方法。通过ORM,可以以面向对象的方式操作数据库,提高开发效率和代码可读性,同时具备良好的可移植性。
摘要由CSDN通过智能技术生成

Model 模型

一、配置数据库

settings.py文件中 默认为sqlite数据库 更改成mysql数据库

实例:

DATABASES = {
   
    'default': {
   
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'helloworld',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'PASSWORD':'123456',
        'USER':'root',
    }
}

project的init.py文件中宏 添加代码如下

import pymysql
pymysql.install_as_MySQLdb()

二、ORM

随着项目越来越大 采用原生SQl的方式 在代码中就会出现大量的SQL语句 那么就会出现如下问题:

  1. SQL语句重复利用率不高 越复杂的SQL语句条件就会越多 代码越长 会出现很多相近的SQL语句
  2. 很多SQL语句都是在业务逻辑中拼接出来的 如果有数据库需要更改 就要去修改这些逻辑 这会很容易漏掉对某些SQL语句的修改
  3. 写原生SQL语句时 胡忽略WEB安全问题 给未来造成隐患

什么是ORM?

orm中文叫做关系映射 通过ORM我们可以通过类的方式去操作数据库 而不用再去写原生的SQL语句 通过把表映射成类 把行作为实例 把字段作为属性 ORM在执行对象操作数据库的时候 最终还是会转换为操作数据库的原生SQL语句

使用ORM优点:

  1. 易用性 使用ORM做数据库的开发 可以有效的减少重复sQL语句的概率 写出来的模型也更加的直观 清晰
  2. 性能损耗小 ORM转换成底层数据库操作指令 确实会有一些开销 但从时机情况来看 这种性能损耗很小 只要不是对性能有严苛的要求 综合考虑开发效率 代码的阅读性 带来的好处要远远大于性能损耗 而且项目越大 作用就越明显
  3. 设计灵活 可以轻松的写出复杂的SQL语句
  4. 可移植性 封装了底层数据库的实现 支持多个关系数据库引擎 包括流行的sqlite MySQL等数据库 轻松切换数据库 来去自如

三、模型的字段和可选条件

(1) 字段类型
字段名称 字段说明 参数
AutoField 一个根据实际ID自动增长的IntegerField 通常不指定(自动生成)
CharField varchar类型字段 max_length 存储值的最大长度
TextField longtext类型长文本
IntegerField int类型字段 存储整形
DecimalField 存储浮点型 更加精准(存储) max_digits=None 位数长度 decimal_places=None 小数的位数
FloatField 存储浮点类型
BooleanField 存储Bool值 True/False
NullBooleanField 存储null/True/False
DateField date子段 auto_now=False 如果对数据进行修改 则会自动保存修改的时间 auto_now_add=False 会自动保存第一次保存数据的时间 俩个参数不能同时使用
TimeField time字段 参数同上
DateTimeField datetime字段 参数同上
(2) 字段选项
可选参数 参数说明
null 如果设置为True 则当前字段值可以为null
blank 如果设置为True 则当前字段可以为空(什么值都没有)
db_column 设置字段名称 不设置 字段默认名称为属性名
db_index 常规索引
unique 唯一索引
primary_key 主键索引
default 默认值

四、定义模型

(1) 模型 数学 表之间的关联

一个模型类 对应数据库中的一张表 一个类数学对应表中的一个字段

(2) 创建我们测试的模型类

models.py

from django.db import models


# Create your models here.
class Test(models.Model):
    char = models.CharField(max_length=20,default='默认值',db_index=True)
    text = models.TextField(null=True,blank=True)
    inter = models.IntegerField(db_column='inte')
    deci = models.DecimalField(max_digits=5,decimal_places=2)
    float = models.FloatField()
    bool = models.BooleanField()
    null = models.NullBooleanField()
    date = models.DateField(auto_now=True)
    time = models.TimeField(auto_now=True)
    datetime = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.char

注意:

blank=True 只能用在字符串的字段类型上 不能用在数值上

(3) 执行迁移 到我们的数据库中

python3 manage.py makemigrations

python3 manage.py migrate

注意:

  1. 如果在执行创建迁移文件的时候 提示没有模型改变 那么就将新建的模型在别的视图函数文件中执行导入 那么出现这个问题的原因(当前django没有检测到你所写的模型类)
  2. 默认的模型名称为 应用名_类名 App_test

数据库中表结构

mysql> desc test;
+----------+--------------+------+-----+
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值