WELCOME

人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。
任何一个伟大的目标,都有一个微不足道的开始。

Django --- ORM框架

现在项目,应用都有了,开始于数据库关联,这时就需要ORM,翻译过来就是--对象关系映射,模型映射。总结就是--通过创建一个类,然后对象名.字段名去操作,不需要写sql语句。通过ORM去操作数据库。

django中内嵌了ORM框架,ORM框架可以将【类和数据表进行对应起来】只需要通过类和对象就可以对数据表进行操作

ORM另外一个作用:根据设计的类生成数据库中的表。    

总结性的说:django中带orm工具,orm工具是干什么呢?就是对数据库操作的一个封装。

那使用orm工具:那个表对应着的class类的名字.objects.get(id=3)    (这就是orm框架)

                 那个表对应着的class类的名字.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()   固定写法   

 

posted @ 2021-04-19 22:42  给鱼喂猫粮  阅读(165)  评论(0)    收藏  举报