ORM——类&对象操作

发布时间 2023-05-20 17:41:56作者: 新兵蛋Z

创建一个表(ORM中就是创建一个类)

  1. 前提是需要进行mysql数据库的配置:请见:数据库配置
  2. 通常设置在models.py中
  3. 下面将举例创建一个表,表头有username和passowrd两个值。
  4. 使用models模块来进行对数据库的操作用来和mysql进行交互的模块。
  5. 在models.py进行mysql数据交互的配置
  6.  
from django.db import models

class user(models.Model):    #继承父类
    username = models.CharField(max_length=32)   #创建一个名为suername的表头,设置值为varchar(32)
    password = models.CharField(max_length=32)   #创建一个名为password的表头,设置值为varchar(32)

对象:

OMR属性名称 mysql表结构   例句   说明
max_length=32 char(32)
username = models.CharField(max_length=32)
指定结构为字符串,最多32字符
primary_key = True primary key
models.AutoField(primary_key = True)
用于指定主键字段
default=‘xxx’ default ‘xxx’
username = models.CharField(default='xxx')
  • 用于设置默认值
  • 与null和blank互斥

unique=True

unique
name = models.CharField(max_length=32,unique=True)
  • 唯一

null=True

blank=True

not null
st_sex = models.CharField(max_length=32,null=True)
  • 数据库可以为null
  • form表单允许为空,一般会一起出现
  • 与default互斥

auto_now_add

auto_now

 
num = models.DateTimeField(auto_now_add=True)
num = models.DateTimeField(auto_now=True)
  • auto_now:每次修改、新增时修改为当前日期时间。
  • auto_now_add:新创建对象时自动添加当前日期时间。

类(表结构)创建

  • models.CharField

  1. 新增字符串字段
from django.db import models
class user(models.Model):
    username = models.CharField(max_length=32)   
    #创建数据名为username的,并且varchar(32)的表头。
  • models.AutoField

  1. 新增自增字段,并添加主键。
  2. 其中的permary_key为必填字段
pid = models.AutoField(primary_key = True)
  • models.IntegerField

  1. 一个整数类型。数值的范围是 -2147483648 ~ 2147483647。
num = models.IntegerField()
  • models.DateField

  1. 日期类型,日期格式为YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.date的实例。
  2. auto_now和auto_now_add和default参数是互斥的,不能同时设置。

对象:

  • auto_now:每次修改、新增时修改为当前日期时间。
  • auto_now_add:新创建对象时自动添加当前日期时间。
num = models.DateTimeField(auto_now_add=True)
#datetime.datetime(2023,4,26,16,54,20,89451,tzinfo=<UTC>)
num = models.DateTimeField(auto_now=True)
#datetime.datetime(2023,4,26,16,54,20,89451,tzinfo=<UTC>)
  • DecimalField

  1. 输入十进制
name = models.DecimalField(max_digits=5,decimal_places=2)  #999.99
  • TextField

  1. 本文信息,通常为描述信息
  2. 最好加一个可以为空的属性
name = models.TestField(null=True)
  • models.ForeignKey

  1. 进行对多连表的创建,并设置级联删除。即当关联数据删除时,该信息也将删除。
  2. 创建完成后,表头信息是name_id  而不是name
  3. 创建完成关联对象后,想要展示,那么使用i.name.关联对象的属性即可调出。
name = models.ForeignKey('User',on_delete=models.CASCADE)  #级联,并设置删除方式为级联删除。

可以设置其他选项:

    name = models.ForeignKey('User',on_delete=models.SET())   #当关联数据删除时,设置一个其他值
    name = models.ForeignKey('User',on_delete=models.SET_NULL) #当关联数据删除时,设置为NULL
    name = models.ForeignKey('User',default='xxx',on_delete=models.SET_DEFAULT)  #当关联表删除时,设置为默认值。
    name = models.ForeignKey('User',related_name='xxx',on_delete=models.SET_DEFAULT)  #使用反向查询时使用。
  • ManyToManyField

  1. 创建多连表时,使用该属性可以直接将多个表进行关联
  2. 该命令会 生成第三张表
  3. 如果要查询所关联的对象所有信息,那么使用author.books.all()

删:

对类(表)进行删除

如果需要删除整个类(这个表),那么就直接将已经同步好的ORM进行注释即可。

改:

对类(表)进行更改:

  • 修改对象名称(表头信息)

直接修改名称即可,然后再将数据同步到数据库中。

数据库同步:

  1. 需要两个步骤进行。
  2. 在需要运行时,APP对mysql的配置一定要已经写入到了django的配置表中,否则将会报错。

创建迁移文件

  1. 配置如果没有异常情况时,会在该路径中创建一个py文件,记录创建信息。
python .\manage.py makemigrations

上传数据库

  1. 运行时,会出现大量OK字段,这里关注APP名称字段是否OK即可。
python .\manage.py migrate

数据退回操作

  • 在没有进行同步命令时,是可以进行回退的。
  • 当输入第一条更改命令后,想要回退,那么把APP中的更改文件删除即可。

查看操作记录

要查看的话,就看APP的相关操作即可。