ORM基础

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: ORM是对象关系映射,简化数据库与数据模型的绑定,允许模型设计独立于特定数据库。在Django中使用ORM,包括三步:1) 定义模型类,如`User`,包含字段;2) 配置数据库连接,如sqlite3或mysql;3) 使用`makemigrations`和`migrate`命令创建数据库表。若需查看ORM转换的SQL,可配置日志设置。此外,可为每个应用单独配置数据库,并用`migrate --database`进行特定数据库的迁移。

ORM(Object Relational Mapping)是对象-关系-映射的简称。

ORM是MVC框架中的重要的部分。它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量

在ORM中,有三种对应关系:

  • 类对应表
  • 类属性对应表字段
  • 类对象对应表记录

如何在Django中使用ORM

  • 1.创建对象映射关系,即创建模型类,其实就是在app下的models.py中,以类和属性的形式定义表的字段
    models.py
from django.db import models
class User(models.Model):
      username = models.CharField(max_length=32, verbose_name='用户名')
       
     # 当输出对象时候自动输出相应对象(记录)的用户名【纯是输出对象为了好看哈哈哈】
      def __str__(self):
           return self.username
  • 2.配置数据库连接,并且有了关系映射关系,这个时候就可以通过命令在数据库中生成具体表了
    db.sqlite3配置
    dj.sqlite3是django中的集成数据库,在settings中配置好的,适合测试环境用【适用于数据量小的时候】
DATABASES = {
      'default': {
          'ENGINE': 'django.db.backends.sqlite3',
          'NAME': BASE_DIR / 'db.sqlite3',
      }
  }
  • mysql配置
    首先安装用于连接mysql的模块
pip install pymysql
  • 然后添加配置,在与项目同名目录中的__init__.py添加以下代码
import pymysql
pymysql.install_as_MySQLdb()
  • 接下来,就需要手动在mysql中手动创建数据库啦
    然后,连接mysql还需要再Django中的settings中配置一下
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day07',        #你的数据库名称
        'USER': 'root',       #你的数据库用户名
        'PASSWORD': '123',  #你的数据库密码
        'HOST': '',       #你的数据库主机,留空默认为localhost
        'PORT': '3306',     #你的数据库端口
    }
}
  • 由于ORM会将ORM语句转换成原生sql语句,可能有些SQL不符合我们的预期,所以这个日志配置,用来查看 ORM到底将语句转换成什么,方便我们排查
    如果想查看ORM转换为的sql语句,可以在settings中配置
LOGGING = {
 'version': 1,
 'disable_existing_loggers': False,
 'handlers': {
     'console':{
         'level':'DEBUG',
         'class':'logging.StreamHandler',
     },
 },
 'loggers': {
     'django.db.backends': {
         'handlers': ['console'],
         'propagate': True,
         'level':'DEBUG',
         },
   }
}
  • 也可以为每个app单独配置数据库,可以在settings中配置
DATABASES = {
  'default': {
      'ENGINE': 'django.db.backends.mysql',
      'NAME':'bms',           # 要连接的数据库,连接前需要创建好
      'USER':'root',        # 连接数据库的用户名
      'PASSWORD':'',        # 连接数据库的密码
      'HOST':'127.0.0.1',       # 连接主机,默认本级
      'PORT':3306            #  端口 默认3306
  },
  'app01': { #可以为每个app都配置自己的数据,并且数据库还可以指定别的,也就是不一定就是mysql,也可以指定sqlite等其他的数据库
      'ENGINE': 'django.db.backends.mysql',
      'NAME':'bms',           # 要连接的数据库,连接前需要创建好
      'USER':'root',        # 连接数据库的用户名
      'PASSWORD':'',        # 连接数据库的密码
      'HOST':'127.0.0.1',       # 连接主机,默认本级
      'PORT':3306            #  端口 默认3306
  }

}

  • 3.数据库迁移,只需要执行两个命令就可以
python manage.py makemigrations   # 用来读取你在modesl.py中的类和属性,创建数据库的映射关系【生成文件】
 python manage.py migrate  # 读取映射关系文件,在数据库中生成相应的表
  • 上述命令会将所有的APP(settings中的INSTALLED_APPS中的app)中的models.py的映射类,真正的在数 据库中创建相应的表。但是也可能有失败的时候,那么我们就要强制执行数据库迁移命令:
python manage.py migrate your_app_name --database your_app_name
  • 上述操作,仅适用于连接mysql注意点
  • Django为了区分某个表属于某个应用,创建的表都是以应用名加下划线加表名的形式,如上述的UserInfo表,Django会创建成app01_userinfo
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
缓存 Java 数据库连接
从ORM到实践:Hibernate与JPA的详细指南
【6月更文挑战第25天】ORM技术如Hibernate和JPA简化了Java与数据库交互。Hibernate是流行的ORM框架,JPA是Java EE的规范,两者结合提供了高效的数据持久化方案。配置Hibernate涉及数据库连接和实体映射。通过注解定义实体类,如`@Entity`、`@Table`、`@Id`等。持久化操作通过Session接口完成,例如保存对象。缓存、加载策略(延迟加载 vs. 立即加载)和查询优化是提升性能的关键。理解这些概念有助于选择和优化ORM使用。
161 0
|
7月前
|
SQL 关系型数据库 MySQL
ORM模型介绍
ORM模型介绍。
59 4
|
SQL 关系型数据库 MySQL
我们要不要使用 ORM?
我们要不要使用 ORM?
112 0
|
SQL 关系型数据库 程序员
什么是ORM?为什么要使用ORM?底层原理是什么?
什么是ORM?为什么要使用ORM?底层原理是什么?
1424 0
|
SQL 算法 数据库
什么是ORM?为什么用ORM?浅析ORM的使用及利弊
什么是ORM ORM(Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
3095 0
|
数据库 SQL Python
ORM详解
ORM详解
1130 0
|
SQL
ORM映射框架总结--数据操作(四)
1.BaseEntityHelper 解析实体类特性 代码   1 /**  2  *   3  * 2009-4-17  4  *   5  *   6  * 字段的特性  7  * */  8 using System;  9 using System.
789 0
|
存储 SQL 数据库
ORM映射框架总结--数据操作(七)
2. 数据库操作实现类 SqlHelper 代码 /** *  * 2009-4-22 *  *  * 数据库操作的公共类 * */using System;using System.Collections.
702 0
|
数据库连接 数据库
ORM映射框架总结--数据操作(五)
1.数据库加载驱动和操作接口 IDbProvider 代码  1 /** 2  *  3  * 2009-4-22 4  *  5  *  6  * 数据库操作加载驱动接口,  7  * 提供了数据库操作的各种命令  8  * */ 9 using System;10 using System.
800 0
|
Java 数据库 数据格式
什么是ORM?
对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。
1246 0