数据库中ORM框架介绍,建模型类和生成迁移

ORM框架

O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。

django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。

使用django进行数据库开发的步骤如下:

  1. 配置数据库连接信息
  2. 在models.py中定义模型类
  3. 迁移
  4. 通过类和对象完成数据增删改查操作

ORM作用
在这里插入图片描述

配置

在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。

  1. 使用MySQL数据库首先需要安装驱动程序

pip install PyMySQL

  1. 在Django的工程同名子目录的__init__.py文件中添加如下语句

from pymysql import install_as_MySQLdb

install_as_MySQLdb()

作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。

  1. 修改DATABASES配置信息

     DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.mysql',
             'HOST': '127.0.0.1',  # 数据库主机
             'PORT': 3306,  # 数据库端口
             'USER': 'root',  # 数据库用户名
             'PASSWORD': 'mysql',  # 数据库用户密码
             'NAME': 'django_demo'  # 数据库名字
         }
     }
    
  2. 在MySQL中创建数据库

create database django_demo default charset=utf8;

定义模型类

  • 模型类被定义在"应用/models.py"文件中
  • 模型类必须继承自Model类,位于包django.db.models中。
    1) 数据库表名

模型类如果未指明表名,Django默认以 小写app应用名_小写模型类名 为数据库表名。

可通过db_table 指明数据库表名。

2) 关于主键

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

3) 属性命名限制

  1. 不能是python的保留关键字。
  2. 不允许使用连续的下划线,这是由django的查询方式决定的。
  3. 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

属性=models.字段类型(选项)

4)字段类型
在这里插入图片描述

5) 选项

在这里插入图片描述
null是数据库范畴的概念,blank是表单验证范畴的

6) 外键

在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:

  • CASCADE 级联,删除主表数据时连通一起删除外键表中数据

  • PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据

  • SET_NULL 设置为NULL,仅在该字段null=True允许为null时可用

  • SET_DEFAULT 设置为默认值,仅在该字段设置了默认值时可用

  • SET() 设置为特定值或者调用特定方法,如

     from django.conf import settings
     from django.contrib.auth import get_user_model
     from django.db import models
     
     def get_sentinel_user():
         return get_user_model().objects.get_or_create(username='deleted')[0]
     
     class MyModel(models.Model):
         user = models.ForeignKey(
             settings.AUTH_USER_MODEL,
             on_delete=models.SET(get_sentinel_user),
         )
    
  • DO_NOTHING 不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常

2 迁移
将模型类同步到数据库中。

1)生成迁移文件

python manage.py makemigrations

2)同步到数据库中

python manage.py migrate

发布了58 篇原创文章 · 获赞 14 · 访问量 9362

猜你喜欢

转载自blog.csdn.net/lh_hebine/article/details/99623258
今日推荐