一、ORM是什么?
ORM全称:Object Relational Mapping 关系对象映射
ORM分为两种:
1、DB First 先创建数据库表结构,根据表结构生成类,根据类操作数据库
2、Code First 是先写代码,后创建数据库,根据类创建数据库表.
主流的orm都是code first。django 的orm也是code first
Django的ORM来源: django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。
Django连接数据库MySQL: 使用MySQL数据库首先需要安装驱动程序。(pip install PyMySQL 调用时为 import pymysql)
Django默认导入的mysql的驱动程序是MySQLdb,然而MySQLdb对于py3支持不全,所以这里使用PyMySQL。 用于Python链接Mysql数据库的接口。需要在__init__文件指定
from pymysql import install_as_MySQLdb install_as_MySQLdb() 。作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。
ORM:对象关系映射。在项目与数据库之间起桥梁作用。
-
1、在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。例如:模型类BookInfo --映射到–> 数据表bookinfo。使数据库设计更加简单
-
2、ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。
核心思想: 用面向对象的方式去操作数据库的创建表、增加、修改、删除、查询等操作。把面向对象中的类和数据库表一一对应,通过操作类和对象,对数据表实现数据操作,不需要写sql,由orm框架生成。
Django的ORM操作原理: Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite…,如果数据库迁移,只需要更换Django的数据库引擎即可
Django的ORM优点缺点:
-
1)只需要面向对象编程, 不需要面向数据库编写代码,对数据库的操作都转化成对类属性和方法的操作.不用编写各种数据库的sql语句.
-
2)实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.不在关注用的是mysql,oracle…等.,通过简单的配置就可以轻松更换数据库, 而不需要修改代码.
-
3)在映射过程中有性能缺失,面向对象编程到sql语句之间的映射需要过程时间,造成性能缺失
二、Django中关于ORM的使用
1. 配置Django框架中所使用的数据库
django有默认自带的数据库,当然也可以用其他的数据库,修改数据库的方式也很简单是需要在setting.py修改
DATABASES这里面的参数就可以了,这里使用的是默认的sqlite3
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
2. 使用模型 M(modules.py),通过面向对象来实现,无须面向SQL
2-1 先在models.py里定义模型类
From django.db import models
Class Books(models.Model): #继承models.Model才能成为模型类
Title = modes.CharField(max_length = 20) #设定最大长度
Pub_data = models.DateField() #日期格式
Def __str(self): # 定义一个方法显示字符串
Return sef.title.encode(‘utf-8’) #有中文的话,编码utf-8不会报错
Class Hero(modes.Mode):
Name = models.CharField(max_length = 30)
Content = models.CharField(max_length = 100)
Gender = modes.BooleanField(default=True) #Bool 类型
Book = modes.ForeignKey(Books) # 外键,表示指定Book会对应一个类Books对象
Def __str__(self):
Return sef.name.encode(‘utf-8’)
2-2 在项目目录下生成迁移,类似生成数据库语句
python manage.py makemigrations #生成迁移文件
生成迁移文件的命令:根据模型类的属性来确定数据库表中的结构。根据模型类生成迁移文件,会在应用目录下migrations目录里,生成py文件(相当于SQL文件),放类似于SQL语句的东西
python manage.py migrate #迁移
根据迁移文件创建数据库生成表,在booktest下生成db_sqlite3数据库
参考
-
python manage.py makemigrations 这个命令是记录我们对models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件。例如:0001文件,如果你接下来还要进行改动的话可能生成就是另外一个文件不一定都是0001文件,他会在你的最近一次迁移文件加一,比如上次你的迁移文件是0001那么这次你的迁移文件就是0002.
-
这个命令并没有作用到数据库,他只是记录你的数据库需要更改的地方也就是你的model更改的东西,所以我们需要执行python manage.py migrate 命令 这条命令的主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库,比如创建数据表,或者增加字段属性
-
重点生成的迁移文件不要修改或者删除它。每次执行migrate相应的就会在数据库中生成一条相关记录,每次执行migrate就会查询数据库中最后一次执行的迁移文件,然后再执行你新生成的。