【Django学习】(五)ORM框架的配置与使用

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 【Django学习】(五)ORM框架的配置与使用

之前学习了Django中的请求和响应方式,这次我们要学习Django中的ORM数据库框架;

日常工作中可能会遇到各种数据库,比如MySQL、oracle、mangodb、redis、sql server、db2、sqlite等等

1、回顾下pymysql第三方库如何从mysql数据库中获取数据:

a.安装pymysql模块

b.创建连接对象(添加配置)

c.创建游标对象

d.使用游标对象执行sql语句

e.获取执行结果(数据)

f.关闭游标

g.关闭连接

2、直接使用pymysql模块操作数据库,有什么痛点?

a.写sql语句非常困难

b.sql语句可能效率比较低

c.sql语句可能会有安全漏洞

d.操作数据库过程复杂

3、数据库的结构

a.一个mysql数据库管理软件中,可以有多个数据库

b.一个数据库里,可以有多张表

c.一张表里,可以有多个字段

d.一张里,可以有多个记录

一个数据库==一个配置

一张表 == 一个类

多个字段 === 一个类中多个属性

多个记录 == 一个类的多个实例对象

配置数据库信息

这里我们使用sqllite3数据库来练习,接下里进行配置

pycharm编译器中添加数据库

点击右侧的database-->点击”+“-->鼠标悬停在Data Source上-->选择SQLite

Name:设置数据库名称

File:设置sqlite的执行文件(db.sqlite3)路径

点击Test Connection 可以测试下是否连接成功,点击apply和OK即可。

配置全局配置表信息

在全局配置问价setting.py中的DATABASES中配置相应的数据库信息:

DATABASES = {
    # a.可以在DATABASES字典中添加数据库配置
    # b.子字典中的key值为数据别名,default为默认别名
    # c.value为具体的数据配置信息
    'default': {
        # d.指定数据库引擎,可以添加.mysql、.oracle、.sqlite3等
        # 'ENGINE': 'django.db.backends.mysql',
        'ENGINE': 'django.db.backends.sqlite3',
        # e.指定数据库名称,如果使用sqlite3数据库引擎,那么指定的是sqlite3数据库的路径
        'NAME': BASE_DIR / 'db.sqlite3',
        # 'NAME': 'my_django',
        # 指定数据库用户名
        # 'USER': 'keyou',
        # 指定数据库用户密码
        # 'PASSWORD': '123456',
        # 数据库主机地址(ip或者域名)
        # 'HOST': '111.122.21.1',
        # 指定数据库的监听端口,默认为3306
        # 'PORT': 3306
    }
}

所以说,如果需要用到多个数据库的话,比如多个关系型数据库就需要在DATABASES里添加一个数据库配置。

创建模型类对象

鉴于数据库不同的表字段有些事相同的,所以可以单独提出来封装一个公共类

base_model.py

from django.db import models
class BaseModel(models.Model):
    """"
    数据库公共字段
    """
    create_time = models.TimeField(auto_now_add=True, verbose_name="创建时间", help_text="创建时间")
    update_time = models.TimeField(auto_now=True, verbose_name="更新时间", help_text="更新时间")
    class Meta:
        abstract=True
        verbose_name="公共字段表"
        db_table="BaseModel"

说明:

  • 定义类属性
  • 定义Field对象作为类属性,那么一个类属性对应数据表中的一个字段
  • 默认会生成一个名为id的自增主键字段
  • models.CharField指定创建的字段为字符串类型,必须得传递max_length最大尺度
  • models.IntegerField指定创建的字段为int整数类型
  • verbose_name和help_text关键字参数,指定字段的中文注释(说明)信息,一般在后台管理站点、api接口文档平台中有应用
  • unique指定是否唯一,默认为False,如果设置为True,那么该字段不能重复设置
  • 可以使用primary_key=True,指定该字段为主键,一张表中往往只有一个主键只要设置了primary_key=True,那么ORM框架,不会自动添加名称为id的主键
  • 在日期和时间相关字段中,可以添加auto_now_add或者auto_now
  • auto_now_add指定在数据第一次创建时,自动添加创建的日期,以后更新数据记录之后,不会修改该字段
  • auto_now指定数据在每一次修改(更新)时,自动设置修改那一刻的时间
  • 一定要继承models.Model父类或者models.Model子类
  • 一个模型类,对应一张表
  • 模型类的内部类Meta:
  • 如果没有设置内部类的相关信息:
  • 生成的默认表名为子应用名_模型类敏感小写
  • 设置abstract=True
  • 指定该模型类为抽象模型类,在迁移时不会创建该表
  • 仅用于被其他类继承

需要在对应的子应用projects下面的views.py文件里创建模型类对象

from django.db import models
# Create your models here.
from utils.base_model import BaseModel
class ProjectsModel(BaseModel):
    id = models.AutoField(primary_key=True, verbose_name="id主键", help_text="id主键")
    name=models.CharField(max_length=200,verbose_name="项目名",help_text="项目名")
    leader=models.CharField(max_length=20,verbose_name="负责人",help_text="负责人")
    tester=models.CharField(max_length=20,verbose_name="测试",help_text="测试")
    programmer=models.CharField(max_length=50,verbose_name="开发人员",help_text="开发人员")
    publish_app=models.CharField(max_length=100,verbose_name="发布应用",help_text="发布应用")
    desc=models.TextField(max_length=200,verbose_name="简要描述",help_text="简要描述",blank=True,null=True,default="")
    class Meta:
        db_table = 'tb_projects'
        verbose_name = '项目信息'
        verbose_name_plural = verbose_name
    def __str__(self):
        # a.必须返回一个字符串类型
        # b.在打印模型类对象时,会自动调用
        return self.name
  • 修改表信息
  • class Meta:
  • 定义Meta内部类,Meta类名固定
  • db_table:
  • 是给该模型类对象对应的数据库表起的别名;
  • verbose_name与verbose_name_plural:
  • 指定表的中文注释(说明)信息,一般在后台管理站点、api接口文档平台中有应用

接下来进行数据库的迁移:

进行迁移:

a.生成迁移脚本:在虚拟环境中,项目根目录下,使用python manage.py makemigrations 子应用名称

b.执行迁移脚本:使用python manage.py migrate 子应用名称

c.如果不添加子应用名,那么会对所有的子应用(settings.py INSTALLED_APP列表中注册的所有子应用)进行迁移

d.如果添加子应用名,那么会对添加的子应用名进行迁移

3python manage.py sqlmigrate 子应用名,查看原生 sql语句

迁移后就是看到数据库中的对应表结构

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
11月前
|
关系型数据库 MySQL 数据库连接
Django数据库配置避坑指南:从初始化到生产环境的实战优化
本文介绍了Django数据库配置与初始化实战,涵盖MySQL等主流数据库的配置方法及常见问题处理。内容包括数据库连接设置、驱动安装、配置检查、数据表生成、初始数据导入导出,并提供真实项目部署场景的操作步骤与示例代码,适用于开发、测试及生产环境搭建。
526 1
|
10月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
499 1
|
SQL 安全 数据库连接
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
563 170
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
1030 173
|
存储 SQL 数据采集
Django框架的表单验证和过滤机制的原理是什么?
Django框架的表单验证和过滤机制的原理是什么?
298 170
|
监控 安全 测试技术
Django框架的表单验证和过滤机制是否可以应对复杂的安全场景?
综上所述,Django 框架的表单验证和过滤机制在一定程度上可以应对复杂的安全场景,但需要综合运用多种手段来进一步提升安全性,以适应不断变化的安全挑战。
454 159
|
数据采集 中间件 Python
如何在Django框架中进行输入验证和过滤?
通过综合运用这些方法,可以在 Django 框架中有效地进行输入验证和过滤,提高应用的安全性和数据质量。同时,还可以根据具体的业务需求进一步扩展和定制验证逻辑。
536 158
|
SQL 定位技术 数据库
深入探索Django ORM:高效数据库操作的秘诀####
本文旨在为读者揭开Django ORM(对象关系映射)的神秘面纱,通过一系列生动的比喻和详实的案例,深入浅出地讲解其核心概念、工作原理及高级特性。我们将一起探讨如何利用Django ORM简化数据库交互,提升开发效率,同时确保数据的一致性和安全性。不同于传统的技术文档,本文将以故事化的形式,带领读者在轻松愉快的氛围中掌握Django ORM的精髓。 ####
|
SQL 关系型数据库 数据库
总结一下这几天学习django的心得
总结一下这几天学习django的心得 http://www.tuicool.com/articles/jMVB3e 时间 2014-01-12 11:40:11  CSDN博客 原文  http://blog.csdn.net/jackrex/article/details/18180279 主题 Django 数据库 Python 是个门十分简洁 好用的编程语言,我之前熟悉的是Java 但是用了Python之后 ,发现python的语法还有结构十分清晰,比如强制的缩进,空行,给人的感觉是,写出来的代码很整洁,非常干净漂亮。
1558 0
|
11月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
595 1