ORM初探(一)
object relational mapping(orm):
对象关系映射(object relational mapping,简称orm)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,orm是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
orm在业务逻辑层和数据库层之间充当了桥梁的作用。
orm的优势:
orm解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
orm提供了对数据库的映射,不用直接编写sql代码,只需操作对象就能对数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。
orm的劣势:
orm的缺点是会在一定程度上牺牲程序的执行效率。
orm的操作是有限的,也就是orm定义好的操作是可以完成的,一些复杂的查询操作是完成不了。
orm用多了sql语句就不会写了,关系数据库相关技能退化。
django项目中使用mysql数据库:
1、创建django项目:
创建好项目后生成如下目录结构:先简单认识几个文件。
2、orm只能操作数据库中的表,不能操作数据库,所以我们需要到mysql数据库中手动创建数据库orm_practice
3、创建好数据库后到django项目中的设置文件中设置连接数据库,默认配置如下:
我们重新修改配置文件,修改后的配置看起来像下面这个样子:
4、在orm_practice项目下的同名文件夹下找到__init__.py文件引用pymysql模块,告诉django使用该模块操作数据库。
import pymysql pymysql.install_as_mysqldb()
5、到app目录下的models.py中创建出版社publishing,书籍books,作者author三张表,models.py中的每个类就是一张表,类中的属性对应表的字段。
表的结构:一个出版社可以出版多本书,一本书可以由多个作者共同编写,同时一个作者也可以写多本书。最终表的关系如下所示:
from django.db import models # create your models here. class publishing(models.model): pid = models.autofield(primary_key=true) name = models.charfield(max_length=30) class books(models.model): bid = models.autofield(primary_key=true) name = models.charfield(max_length=30) pid = models.foreignkey("publishing",on_delete=models.cascade) class author(models.model): aid = models.autofield(primary_key=true) name = models.charfield(max_length=30) books = models.manytomanyfield("books")
6、创建表后(也就是在models.py中的类),需要到终端中执行两条命令。
python37 manage.py makemigrations # 生成迁移文件 python37 manage.py migrate # 执行数据迁移
7、使用pycharm带的mysql插件查看数据库结构,首先添加数据库管理器:
选择mysql后会弹出如下配置对话框:
配置成功后,使用mysql管理器对数据库进行操作。
如果觉得图形界面不习惯,也可以使用mysql命令行进行操作,这里主要对app_author、app_author_books、app_books、app_publishing这几张表进行操作。
8、向表app_author、app_author_books、app_books、app_publishing添加数据
8.1出版社表app_publishing中添加字段信息。
8.2书籍表app_books添加字段信息。
8.3作者表app_author添加字段:
8.4在书籍和作者关系表中app_author_books添加字段
到此建表完成。
我们在models.py中其实只创建了三个类publishing、books、author,正常来说也就是创建三张表,但是这里生成了四张表多一个app_author_books,这张表是由作者表中多对多关系django为我们自动创建的。
##############################################################################################
好了这里先停一下,下节来看一下orm中的常用字段
##############################################################################################
上一篇: element-ui 关于获取select 的label值方法
下一篇: python 画个小猪佩奇