Django基础之ORM初识

一.前言

今天我们大致来了解一下django的orm,只是简单的了解,具体的会在下一期和大家来说,本质是关系对象映射,简单点来说就是翻译,利用类创建数据库

二.表结构

2.1 基础配置

首先在app中的models.py中按照规则编写类

编写类

python 复制代码
from django.db import models

class UserInfo(models.Model):
    name = models.CharField(max_length=16)
    age = models.IntegerField()

注册app(这个前面都讲过了)

命令,django根据models中类生成一个 对数据库操作的配置文件 => migrations

python manage.py makemigrations

命令,读取已经注册么给app中的migrations目录将配置文件 -> 转换成:生成表,修改表 SQL -> 连接数据库去运行。

python manage.py migrate

  • 那个数据库?

  • 数据库账户和密码?

这节就不跟大家说如何去改配置了,通常我们都是配置mysql,这次我们就用他默认的

常见问题:请不要再手动去修改数据的表结构 + 时刻保证 ORM和数据表是对应。

2.2 常见字段和参数

字段

CharField //字符类型

SmallIntegerField //短整型

IntegerField //整形

BigIntegerField //长整型

DateField //日期

DateTimeField //日期和具体时间

BooleanField -> 其实数据库不支持真假,根据SmallIntegerField创造出来出来。 0 1

DecimalField -> 精确的小数

复制代码
name=models.CharField(max_length=16,verbose_name='姓名')
age=models.IntegerField(verbose_name='年龄')

参数

通用参数

verbose_name="姓名" :用来知道这个字段的含义

default :默认值

null=True:通常和blank一起写,允许数据库值为空

blank=True:允许页面展示为空

db_index=True:建立索引

choices=(("sh", "上海"), ("bj", "北京")) :采用元组套着元组,表示值只能元组里面选,里面的元组前面是数据库存储,后面是页面的展示

unique=True :唯一值,不允许重复

字符类型

max_length 一定要加上,约束最大长度

code = models.CharField(verbose_name="姓名", max_length=16, choices=(("sh", "上海"), ("bj", "北京")),default="sh")

整数类型

无特殊参数

count = models.IntegerField(verbose_name="数量", default=1, null=True, blank=True, unique=True)

时间类型

auto_now=True :添加值的时候自动把当前时间添加进去,就可以不用手动传

register_date = models.DateField(verbose_name="注册时间", auto_now=True)

精准小数类型

max_digits=10 :最大长度是10

decimal_places=2 :小数点后面保留两位

示例:

python 复制代码
from django.db import models

class UserInfo(models.Model):
    name = models.CharField(verbose_name="姓名", max_length=16, db_index=True)
    age = models.PositiveIntegerField(verbose_name="年龄")
    email = models.CharField(verbose_name="邮箱", max_length=128, unique=True)
    amount = models.DecimalField(verbose_name="余额", max_digits=10, decimal_places=2, default=0)
    register_date = models.DateField(verbose_name="注册时间", auto_now=True)


class Goods(models.Model):
    title = models.CharField(verbose_name="标题", max_length=32)
    # detail = models.CharField(verbose_name="详细信息", max_length=255)
    detail = models.TextField(verbose_name="详细信息")
    price = models.PositiveIntegerField(verbose_name="价格")
    count = models.PositiveBigIntegerField(verbose_name="库存", default=0)

2.3 表关系

一对多关系:

有的时候我们会有一对多的关系,比如上图,一个部门会有多个用户,那此时此刻我们就要创建表关系了

python 复制代码
from django.db import models

class Department(models.Model):
    '''部门表'''
    title=models.CharField(verbose_name='部门标题',max_length=16)


class UserInfo(models.Model):
    '''用户表'''
    name=models.CharField(verbose_name='姓名',max_length=16)
    # to_fields如果不写就是默认关联id字段 models.CASCADE就是级联删除
    depart=models.ForeignKey(verbose_name='部门ID',to='Department',to_field='id',on_delete=models.CASCADE)

    # models.SET_NULL 删除就设置为空
    # depart=models.ForeignKey(verbose_name='部门ID',to='Department',to_field='id',on_delete=models.SET_NULL,null=True,blank=True)
    
    # models.SET_DEFAULT 删除就设置成默认值
    # depart=models.ForeignKey(verbose_name='部门ID',to='Department',to_field='id',on_delete=models.SET_DEFAULT,default=1)

多对多关系:

如图这个就是一个多对多关系,男生可以和任意的女生约会,女生也可以和任意的男生约会,但是如果我们在男女后面都加上一个约会的男女字段,那么就会出现大量的冗余,此时此刻我们就需要创建第三张表,表中对应上男女的字段, 专门存储男女的约会信息

python 复制代码
from django.db import models
class Boy(models.Model):
    name=models.CharField(verbose_name='姓名',max_length=16)

class Girl(models.Model):
    name=models.CharField(verbose_name='姓名',max_length=16)

class B2G(models.Model):
    bid=models.ForeignKey(verbose_name='男生ID',to='Boy',to_field='id',on_delete=models.CASCADE)
    gid=models.ForeignKey(verbose_name='女生ID',to='Girl',to_field='id',on_delete=models.CASCADE)

或者使用ManytoManyField字段自动生成第三张表,但是这个表只能对应上两个字段的对应关系,无法再加上其他数据,例如约会地点啥啥啥的

python 复制代码
from django.db import models
class Boy(models.Model):
    name=models.CharField(verbose_name='姓名',max_length=16)
    
class Girl(models.Model):
    name=models.CharField(verbose_name='姓名',max_length=16)
    relation=models.ManyToManyField(verbose_name='男女关系',to='Boy')

三.总结

今天主要还是简单知识点,做个了解就行了,下次会和大家具体讲orm,那个篇幅就很长了,本章相当于是药引,下一期才是猛药

四.补充

下一期将和具体讲解一下orm,期待大家的点赞关注加收藏

相关推荐
小兔崽子去哪了3 小时前
深度学习 2 / CNN 神经网络
后端·python
weixin_440730503 小时前
队列QUEUE介绍+类型示例(先进先出、后进先出、优先级高先出、双端进入、生产者+消费者线程)
python·线程·queue
这是程序猿3 小时前
Java线程池深度剖析:源码原理、核心参数、任务调度与生产调优实战
java·开发语言·python
rannn_1114 小时前
【Java面试八股】Java基础篇|数据类型、面向对象、关键字、反射、注解、异常、新特性、序列化、设计模式、IO
java·后端·面试
Web3&Basketball4 小时前
ChatGPT 路由自证:跨客户端实测对照
python·大模型·agent·推理·推理优化
Patrick在香港4 小时前
Claude 工作提醒自动化:香港天文台四个接口三个「更新时间」,警告到期了却还在生效
python·api·claude·数据抓取·香港
用户8356290780514 小时前
Python 实现 Word 文档域的插入与管理
后端·python
quantdash_cc4 小时前
从数据采集到策略消费,股票日内行情管道应该怎么设计?
开发语言·python·数据分析·量化交易·股票数据·quantdash
MacroZheng4 小时前
阿里又开源了一个神级 Skill 项目!
java·人工智能·后端
烂蜻蜓4 小时前
Django入门教程(九):路由系统详解——path、re_path、路由分发、反向解析与命名空间
django