Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查

文章目录

    • Django ORM
    • 1. 环境准备
    • 2. ORM模型的创建和映射
      • 2.1 创建ORM模型
        • 2.1.1 常用字段类型及参数对应表
      • 2.2 添加app到配置文件中
      • 2.3 创建映射关系
    • 3. 总结准备环境和创建映射过程
    • 4. 测试增删改查
      • 4.1 添加数据
      • 4.2 获取数据
      • 4.3 更新数据
      • 4.4 删除数据

Django ORM

  • Django 模型使用自带的 ORM
  • 对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换
  • ORM 在业务逻辑层和数据库层之间充当了桥梁的作用
  • ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中

使用 ORM 的好处:

  • 提高开发效率
  • 不同数据库可以平滑切换

使用 ORM 的缺点:

  • ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低
  • 长期写 ORM 代码,会降低编写 SQL 语句的能力

ORM 解析过程:

  1. ORM 会将 Python 代码转成为 SQL 语句
  2. SQL 语句通过 pymysql 传送到数据库服务端
  3. 在数据库中执行 SQL 语句并将结果返回

ORM 对应关系表:

Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第1张图片

1. 环境准备

目录结构
Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第2张图片
这里要先在命令行执行如下命令,不然服务启动会报错

 pip install mysqlclient 

在这里插入图片描述

修改 settings.py中的DataBase配置项,并修改如下内容

"""
如果你使用了 Python2.x 版本这里添加了中文注释
你需要在 /settings.py 文件头部添加
#  -*- coding: UTF-8 -*-
"""
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
        'NAME': 'test_django',  # 数据库名称
        'HOST': '127.0.0.1',  # 数据库地址,本机 ip 地址 127.0.0.1
        'PORT': 3306,  # 端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': 'root',  # 数据库密码
    }
}

告诉 Django 使用 pymysql 模块连接 mysql 数据库

# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()

找到代码文件根目录执行命令创建app

Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第3张图片

# linux环境下是 django-admin.py startapp app名称
django-admin startapp models

创建成功后目录结构如下

Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第4张图片

2. ORM模型的创建和映射

2.1 创建ORM模型

models/models.py 文件中创建ORM模型

from datetime import datetime
from django.db import models

# class Book 类名是数据库中的表名称
class Book(models.Model):
    """
    	 自动创建一个列名为id的且为自增的整数列
         字段名称 : name 代表数据库中表的字段 name
         字段类型 : CharField = varchar  DateTimeField=datetime FloatField=float
         max_length 限制最大长度
         null=False 不允许为空
    """
    name = models.CharField(max_length=20, null=False)
    author = models.CharField(max_length=20, null=False)
    pub_time = models.DateTimeField(default=datetime.now)
    price = models.FloatField(default=0)

2.1.1 常用字段类型及参数对应表

字段类型 django对应参数 参数描述
主键自增 AutoField int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列
bigint自增列 BigAutoField 必须填入参数 primary_key=True
整数 IntegerField 一个整数类型,范围在 -2147483648 ~ 2147483647
字符 CharField 字符类型,必须提供max_length参数, max_length表示字符长度
布尔值 BooleanField 布尔值类型,True,False
浮点型 FloatField 浮点类型的小数
精准浮点类型 DecimalField 10进制小数,支持更多位数的浮点类型计算
日期 DateField 日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例
日期时间 DateTimeField 格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例
字符串类型 EmailField Django Admin以及ModelForm中提供验证机制
字符串类型 IPAddressField Django Admin以及ModelForm中提供验证 IPV4 机制
字符串类型 URLField Django Admin以及ModelForm中提供验证 URL
字符串类型 SlugField Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
字符串类型 UUIDField Django Admin以及ModelForm中提供对UUID格式的验证
字符串类型 CommaSeparatedIntegerField 格式必须为逗号分割的数字

字段参数表

字段参数 描述
null null=False 代表该字段不允许为空
unique 如果设置为unique=True 则该字段在此表中必须是唯一的
db_index 如果db_index=True 则代表着为此字段设置数据库索引
default 为该字段设置默认值,default = 字段默认值
auto_now_add DatetimeField、DateField、TimeField这个三个时间字段,配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库
auto_now DatetimeField、DateField、TimeField这个三个时间字段,配置上auto_now=True,每次更新数据记录的时候会更新该字段
ForeignKey ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系, 外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多’中’多’的一方
to 设置要关联的表
to_field 设置要关联的表的字段
related_name 反向操作时,使用的字段名,用于代替原反向查询时的’表名_set’

2.2 添加app到配置文件中

myFirstDjango/settings.py文件中找到 INSTALLED_APPS配置,把app添加到配置中

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'models'
]

2.3 创建映射关系

在项目根目录下执行以下命令
Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第5张图片
当然执行命令也可以使用 pycharm的命令行
Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第6张图片

创建表结构

python --version  // 查看python指向的版本
python manage.py migrate   // 创建表结构

执行结果
Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第7张图片
让 Django 知道我们在我们的模型有一些变更,生成迁移脚本文件

python manage.py makemigrations app名称

执行结果
在这里插入图片描述
将迁移脚本文件映射到数据库中

python manage.py migrate app名称

执行结果
Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第8张图片

查看数据库中是否有结果,表的命名方式为 app名称 _ class类名称,所以我这里为models_book

Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第9张图片

3. 总结准备环境和创建映射过程

1. pip install mysqlclient  # 下载mysqlclient 
2. 在settings.py中,配置好DATABASES,做好数据库相关的配置
3. 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
4. django-admin startapp app名称 # 创建app linux环境下使用django-admin.py
5. 在app中的models.py中定义好模型,这个模型必须继承自django.db.models
6. 将这个app添加到settings.py的INSTALLED_APP中
7. 在项目根目录执行如下三个命令 
python manage.py migrate  # 创建表结构
python manage.py makemigrations app名称 # 生成迁移脚本文件
python manage.py migrate app名称 #将迁移脚本文件映射到数据库中

4. 测试增删改查

目录结构
Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第10张图片

4.1 添加数据

myFirstDjango/创建文件 testdb.py,并添加如下内容

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@author: JinWenChao
@file: testdb
@time: 2020/12/3 9:25
"""

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from models.models import Book


# 数据库操作
def testdb(request):
    test1 = Book(name='西游记', author='吴承恩', price=19.88)
    test1.save()
    return HttpResponse("

数据添加成功!

"
)

myFirstDjango/urls.py中添加testdb的路由映射

from django.urls import path
from . import testdb

# 此项就是django的url配置
urlpatterns = [
    # 添加路由 testdb,并绑定视图为 testdb.testdb
    path('testdb', testdb.testdb)
]

启动服务,访问 http://localhost:8080/testdb,结果输出如下

Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第11张图片
查看数据库中是否有数据,有则表示成功

在这里插入图片描述

4.2 获取数据

修改 myFirstDjango/testdb.py 内容如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@author: JinWenChao
@file: testdb
@time: 2020/12/3 9:25
"""

from django.http import HttpResponse

from models.models import Book


# 数据库操作
def testdb(request):
    # 初始化
    response = ""
    response1 = ""

    # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
    list = Book.objects.all()

    # filter相当于SQL中的WHERE,可设置条件过滤结果
    response2 = Book.objects.filter(id=1)

    # 获取单个对象
    response3 = Book.objects.get(id=1)

    # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
    response4 = Book.objects.order_by('name')[0:2]

    # 数据排序
    response5 = Book.objects.order_by("id")

    # 上面的方法可以连锁使用
    response6 = Book.objects.filter(name="runoob").order_by("id")

    # 输出所有数据
    for var in list:
        response1 += var.name + " " + var.author + " " + str(var.price) + " " + str(var.pub_time)
    response = response1
    return HttpResponse("

" + response + "

"
)

启动服务,访问 http://localhost:8080/testdb,结果输出如下

Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第12张图片

4.3 更新数据

修改数据可以使用 save() 或 update():
修改 myFirstDjango/testdb.py 内容如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@author: JinWenChao
@file: testdb
@time: 2020/12/3 9:25
"""
from django.http import HttpResponse
from models.models import Book


def testdb(request):
    # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
    test1 = Book.objects.get(id=1)
    test1.name = '红楼梦'
    test1.save()

    # 另外一种方式
    # Book.objects.filter(id=1).update(name='水浒传')

    # 修改所有的列
    # Book.objects.all().update(name='三国演义')

    return HttpResponse("

修改数据成功

"
)

启动服务,访问 http://localhost:8080/testdb,结果输出如下

在这里插入图片描述
查看数据库中数据是否修改成功

在这里插入图片描述

4.4 删除数据

修改 myFirstDjango/testdb.py 内容如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@author: JinWenChao
@file: testdb
@time: 2020/12/3 9:25
"""

from django.http import HttpResponse
from models.models import Book

# 数据库操作
def testdb(request):
    # 删除id=1的数据
    test1 = Book.objects.get(id=1)
    test1.delete()

    # 另外一种方式
    # Book.objects.filter(id=1).delete()

    # 删除所有数据
    # Book.objects.all().delete()

    return HttpResponse("

删除数据成功

"
)

启动服务,访问 http://localhost:8080/testdb,结果输出如下

在这里插入图片描述
查看数据库,删除成功!

Django框架入门四__构建数据库ORM模型与字段对应参数表,并操作数据库增删改查_第13张图片

你可能感兴趣的:(django,python,mysql,django,ORM模型映射,字段参数表)