一:ORM概念:
也叫对象关系映射 是为了解决面向对象与关系型数据库互相不匹配现象
简单说就是解决面向对象与关系型数据库之间映射的元数据,讲程序中的对象自动持久到关系型数据库中
ORM层在业务逻辑层和数据库层起到桥梁作用。
二:由来((Object Relational Mapping / 对象/关系/映射))
几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。
按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。
三:ORM优势
ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。
四:ORM劣势
ORM的缺点是会在一定程度上牺牲程序的执行效率。
五:ORM总结:
ORM只是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。
但我们不能指望某个工具能一劳永逸地解决所有问题,一些特殊问题还是需要特殊处理的。
但是在整个软件开发过程中需要特殊处理的情况应该都是很少的,否则所谓的工具也就失去了它存在的意义。
六:创建数据库
第一步:创建表
第二部:在settings里面配置数据库:
第三部:在项目名下init文件使用pymysql代替mysqldb连接数据库
第四部:在Models里面创建类(id可以不写)
第五步:创建mysql数据库,执行两条命令:
python manage.py makemigrations / 记录操作
python manage.pymigrate/讲改动翻译成sq语句执行
第二种方法:
tools—run manage.py task 通过执行两条命令,makemigrations /migrate
第二大部分:
2. 表和表之间的关系
1. 一对多(出版社和书)
publisher = models.ForeignKey(to="Publisher")
在数据库中:
有没有publisher这个字段?
数据库中实际 生成的是一个 publisher_id 字段
2. 多对多(作者和书)
books = models.ManyToManyField(to="Book")
在数据库中:
是通过第三张表建立的关系
2. 外键的增删改查
增、删、查同上
book_obj = models.Book.objects.get(id=1)
book_obj.publisher 是什么? *****
和我这本书关联的出版社对象
book_obj.publisher.id 和我这本书关联的出版社的id值
book_obj.publisher.name 和我这本书关联的出版社的名称
book_obj.publisher_id 是什么?
和我这本书关联的出版社的id值
3. 多对多操作
1. 查id为1的作者都写过的书?
author_obj = models.Author.objects.get(id=1)
author_obj.books.all() --> 和我这个作者关联的所有书对象
2. 想给作者绑定多本书?
author_obj = models.Author.objects.get(id=1)
author_obj.books.set([1,2,3]) --> 把id是1、2、3的书和我这个作者关联上