Django 第十课 1.【ORM模型】
ORM模型介绍
随着项目的越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了:
1:SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近的SQL语句
2:很多SQL语句是在业务逻辑中拼出来的,如果有数据库需要更改,就要去修改这些逻辑,这会很容易漏掉对某些SQL语句的修改
3:写SQL时容易忽略web安全问题,给未来造成隐患。如,SQL注入
ORM, 全称object relational Mapping ,中文叫做对象关系映射,通过ORM我们可以通过类的方式操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作为实例,把字段作为属性,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。使用ORM有许多优点:
1:易用性:使用ORM做数据库的开发可以有效的减少重复SQL语句的概率,写出的模型也更加直观,清晰。
2:性能损耗小:ORM转换成底层数据库操作指令确实会有一些开销。但是从实际的情况看,这种损耗很少(不足5%),只要不是对性能有严苛的要求,综合考虑开发效率,代码的阅读性,带来的好处要远远大于性能损耗,而且项目越大作用越明显。
3:设计灵活:可以轻松的写出复杂的查询
4:可移植性:Django封装了底层的数据实现,支持多个关系数据库引擎,包括流行的MySQL,PostgreSQL和SQLite。可以非常轻松的切换数据库
创建ORM模型
‘ORM’模型一般都是放在‘app’的 ‘models.py’ 文件中。每个app都可以拥有自己的模型。并且这个模型想要映射到数据库中,那么这个app必须要放在 ‘settings.py’ 的 ‘INSTALLED_APP’中进行安装。以下是写一个简单的书籍‘ORM’模型,示例代码如下:
from django.db import models#如果要将一个普通的类变成一个可以映射到数据库中的ORM模型 #那么必须要将父类设置为models.Model或者他的子类 class Book(models.Model):#1. id:int类型,是自增长的id = models.AutoField(primary_key=True)#2. name:varchar(100)。图书名字name = models.CharField(max_length=100, null=False)#3. author:varchar(100)。作者名字author = models.CharField(max_length=100, null=False)#4. price:float。价格price = models.FloatField(null=False, default=0)class Publisher(models.Model):name = models.CharField(max_length=100, null=False)address = models.CharField(max_length=100, null=False) #终端进入项目目录,进行虚拟环境 #1. 使用makegrations #python manage.py makemigrations#2. 使用migrate将新生成的迁移脚本文件映射到数据库中 #python manage.py migrate
以上便定义了一个模型。这个模型继承自 ‘django.db.models.Model’,如果这个模型想要映射到数据库中,就必须继承自这个类,这个模型以后映射到数据库中,表名是模型名称的小写形式,为‘book’。在这个表中,有四个字段,如上。
## 映射模型到数据库中:
将‘ORM’模型映射到数据库中,总结起来就是以下几步:
1:在‘settings.py’ 中,配置好 'DATABASES',做好数据库相关的配置。
2:在 ‘app’中的‘models.py’ 中定义好模型。这个模型必须继承自'django.db.models'
3:将这个‘app’添加到‘settings.py’的 ‘INSTALLED_APP’中;
4:在命令行终端,进入到项目所在的路径,然后执行命令 'python manage.py makemigrations',来生成迁移脚本文件
5:同样在命令行终端中,执行 ‘python manage.py migrate’,来讲迁移脚本文件映射到数据库中。
(django-env) macminideMac-mini:orm_intro_demo nelsen$ python manage.py makemigrations #生成脚本文件
Migrations for 'book': book/migrations/0001_initial.py - Create model Book (django-env) macminideMac-mini:orm_intro_demo nelsen$ python manage.py migrate #将迁移脚本文件映射到数据库中
Operations to perform: Apply all migrations: admin, auth, book, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK
转载于:https://www.cnblogs.com/nelsen-chen/p/9492593.html
Django 第十课 1.【ORM模型】相关推荐
- Django(四):ORM模型的增删改成操作+图片字段的处理
文章目录 一.ORM字段类型 1.字段类型 2.字段属性 3.元数据 二.ORM的单表操作 2.1 准备工作 2.2 添加数据 2.3 查询数据 2.4 修改数据 2.5 删除数据 三.多表查询(一对 ...
- Python全栈(十)Django框架之6.ORM模型基本使用
文章目录 一.ORM创建模型和映射数据库 1.创建模型 2.数据库映射 二.ORM模型数据操作 1.添加数据 2.查询数据 3.删除数据 4.更新数据 三.ORM实现图书管理系统 一.ORM创建模型和 ...
- 第二十课 Django Admin后台管理
第二十课 Admin后台管理 1. admin创建用户 创建管理员账号: python manage.py createsuperuser# 按提示输入用户名.邮箱.密码 2. 注册模型 如果只是在a ...
- Django框架学习——10—(QuerySet源码、QuerySet的方法、将QuerySet转换为SQL去执行、ORM模型练习)
1.QuerySet源码 我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作.其实模型名字.objects是一个django.db.models.manager.Manager对 ...
- Django从理论到实战(part27)--ORM模型的增删改查操作
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django从理论到实战(part26)--ORM模型
学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...
- Django笔记:ORM模型
Django中操作数据库的方式有两种,一种是使用ORM模型,另一种是直接执行SQL,推荐使用ORM模型的方式来管理数据库,因为当需要执行的数据库操作过多时,第二种方式产生的SQL会非常难于管理和维护, ...
- Django数据库ORM模型使用(数据查询)!!!Django数据库如何使用ORM模型查询数据? ✧*。٩(ˊᗜˋ*)و✧*。 Django初体验
文章目录 查询方法 查看执行的SQL语句 查询条件 精准与模糊查询 比较条件 时间条件 聚合函数 Avg:求平均值. Count:获取指定的对象的个数. Max和Min:获取指定对象的最大值和最小值. ...
- Python全栈:Django中的ORM模型
文章目录 1 Django中的ORM模型介绍及配置 2 Django中的ORM模型常见字段类型 CharField DateTimeField 模型的创建 3 Django中的ORM模型同步 migr ...
最新文章
- C语言 带比较器的归并排序
- 【小白的CFD之旅】小结及预告
- wdr和hdr的区别
- Android Studio 解决The SDK platform-tools is too old问题
- 中医提到的气是否真实存在?
- How to Install Snapd and Snap applications on CentOS 7
- php及时获取zabbix告警,zabbix邮件告警python脚本代码
- rpm安装mysql5.6_利用rpm安装mysql 5.6版本详解
- matlab里的deploy,MATLAB deploytool simulink未定义函数'load_system'
- 网页设计中色彩的应用
- Hive:动静态分区
- matlab plv,脑电脑网络分析代码使用流程介绍
- rabbitmq 一个生产者多个消费者_RabbitMQ入门学习系列(二),单生产者消费者
- 禁止国外ip访问网站、服务器
- 安装教程之postman下载及安装
- java poi 设置时间空间_POI对Excel自定义日期格式的读取(实例代码)
- 传统与现代的邂逅——新中式景观设计
- 分清frontal plane(额状面)、coronal plane(冠状面)、transverse plane(横断面)、sagittal plane(矢状面)
- 海康威视摄像头rtsp推流至H5总结
- php加密---六种加密方式