现在项目,应用都有了,开始于数据库关联,这时就需要ORM,翻译过来就是--对象关系映射,模型映射。总结就是--通过创建一个类,然后对象名.字段名去操作,不需要写sql语句。通过ORM去操作数据库。
django中内嵌了ORM框架,ORM框架可以将【类和数据表进行对应起来】,只需要通过类和对象就可以对数据表进行操作。
ORM另外一个作用:根据设计的类生成数据库中的表。
总结性的说:django中带orm工具,orm工具是干什么呢?就是对数据库操作的一个封装。
那使用orm工具:那个表对应着的class类的名字.objects.get(id=3) (这就是orm框架)
.objects.filter(id=3)
当然ORM工具还有个好处:后期升级、维护的工作量少,易于扩展和升级。
orm本质是什么:通过操作类和对象以及对象的属性来达到操作mysql数据表以及表的字段的功能。
好处:
比如我们的项目是v1.0版本,在这个版本我们使用的数据库叫做db.sqlite3这个数据库,那我们在项目中写的数据库代码肯定是符合db.sqlite3这个数据库的。现在我们要升级项目,升级成v2.0版本,在这个版本中我们想要使用的数据库叫做mysql数据库,那怎么办呢?我们是不是要将这个项目中所有关于db.sqlite3这个数据库的代码都改换成mysql数据库代码的代码,这样的工程量太大了,后期维护的成本太高了,所以,就有一个ORM的工具出来了,这个ORM工具的好处,就是可以不用写具体的sql语句,而是在项目中写面向对象的语法来达到操作数据库的功能,那这样的话,不管你的项目中使用的mysql数据库还是db.sqlite3这个数据库,我们只需要修改一下配置文件,就可以达到切换数据库的功能,总之我项目中的代码是不需要大量的维护的,这样可以节省人力和时间。
因此我们就需要创建类,那在哪里创建类呢?那肯定是在我们的应用里面创建了类,在上一个随笔里我已经创建了一个名为booktest的应用,在应用的models.py里写。
现在开始创建类,注意这个类要继承models.Model,这个东西是django框架自带的。
我们在这个了里面定义子段 id可以自己生成,不用定义
类已经创建好了,现在要通过这个模型类去生成表:
1) 根据模型类生成迁移文件 在项目下 python manage.py makemigrations
2) 根据迁移文件生成表 python manage.py migrate
然后就是一堆OK,就生成了
注意 上面生成表的方法代码有点长,可以用另外一种方法
在Tools中
,有个
,打开之后显示下面的界面
显示报错,不用管。
因此我们在>这个符号后只写 makemigrations 就行(会有提示),成功后会有下图的一个文件
migrate同样也在这里写
好了,表已经生成。那生成的表呢?
在点击pycharm右上角的Database
点击+号,Data Source
下的
出现下面的界面
显示测试成功,
就行了
这时,右侧会出现
点击后
这不有表了,子段也有了
现在开始通过模型类操作数据表了(比如往表中插入数据):
1) 点击左下角处的Terminal
python manage.py shell 进入交互环境
2) 首先导入模型类,这里我在名为booktest的应用的models.py里创建的模型类BookInfo,因此输入 from booktesst.models import Bookinfo
3)通过这个类去创建东西,首先通过类创建对象,
,这里我创建了名为b的对象。
4)
,注意这里日期类型,要导入包(from datetime import date)。最后对象名.save()保存。这是保存后的结果
总结:先导包,再通过这个模型类创建出一个对象,就可以调用这个对象身上的属性(字段名)b.btitle = “”就是对这个字段进行赋值,b.btitle就是获取这个字段的值,最后的时候记得b.save。
修改数据:对于修改数据,则对象名.要修改的字段名=什么什么· 跟赋值的方式一样,修改完记着 对象名.save() 保存
删除数据:对象名.delete()
注意在 exit() 退出以后再次python manage.py shell 进入交互环境时,之前创建的对象就没了。所以之前创建的对象名在没有exit()退出之前一直存在,你不小心错误修改某条对应对象名的数据之后,只要不对象名.save()就不会真正修改。
查询数据: 类名.objects.get(要查询的东西) 例如 a=Bookinfo.objects.get(id=1)
,你发现结果什么也没有,这里很正常,因为你这个类没有重写str方法。
注意:get()方法是查询一条数据记录,如果查询的数据不存在,则报错。查询出来多条数据也报错。
图书模型类创建好了
现在在创建一个英雄人物模型类
还是在应用的models.py文件里面创建模型类
这里我们创建一个外键
类创建好了,生成迁移文件,然后生成表
表也有了,往表里插入数据
1)到交互环境了里 方法一:
方法二:
方法三:点击这个
一步到位,连shell都不用写
2)还是先导包
3)导入数据
注意外键处
好了创建好了。
1. 我现在要查询虚竹是哪本书里的英雄
或者
2. 查询英雄表里的所有数据: HeroInfo.objects.all()
发现返回的是一个列表,因此
刚刚我们是英雄查询图书,在这个设定中,一本图书中有多个英雄,因此刚刚的查询为多查一(有外键的东西为多类,没有外键的为一类)
3. 查询该图书中都有什么英雄(通过一类去查询多类),比如这里查询天龙八部这本书中都有哪些英雄
要查询的一类某实例对象.多类的单词的所有字母的小写.set.all() 固定写法