(七)Django学习——模型基础ORM简介;Django模型映射关系;Mysql数据库连接配置;模型的创建与映射;数据的增删改查
2021/6/9 19:23:24
本文主要是介绍(七)Django学习——模型基础ORM简介;Django模型映射关系;Mysql数据库连接配置;模型的创建与映射;数据的增删改查,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.Django的ORM简介注意:数据库多种多样,这导致使用不同的数据库就要使用不用的操作数据库的命令,如果我们先是使用的Mysql数据库, 之后因为某些要求要使用到Redis数据库,难道我们要将我们整个项目的相关语句全部都改一遍吗!!!但是至少我知道Django不需要。因为Django自带强大的ORM系统!!!
小拓展:如果使用的是Jva的web框架或者是tornado,flask等不具备此系统的框架,我们也是可以嵌套使用Django框架的ORM系统进行模型迁移哦!!!
第一部分介绍:ORM简介!
(1)ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
(2)ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
第二部分介绍:Django模型映射关系!
1. 模型类必须都写在app下的models.py文件中。
2. 模型如果需要映射到数据库,所在的app必须注册.
3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.
(1)此处模型所在的app名为music,在settings.py中对其进行注册:
(2)在对应的远程数据库中创建对应的数据库:(pycharm中操作)
首先:开启远程连接!
然后,使用远程中的数据库Mysql,并创建对应的数据库db_test
(3)在settings.py中配置DATABASES
# Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'db_test', # 数据库名称 'USER': 'root', # 连接数据库的用户名 'PASSWORD': 'qwe123', # 连接数据库的密码 'HOST': '127.0.0.1', # mysql服务器的域名和ip地址 'PORT': '3306', # mysql的一个端口号,默认是3306 } }
(4)在对应的虚拟环境中安装pymysql!
(5)设置连接器为pymysql(因为Django默认使用的数据库不是Mysql)
在主目录下的的__init__.py文件添加下面两句:
import pymysql pymysql.install_as_MySQLdb()3.模型的创建与映射
(1)在app下面的models.py中创建django的模型类.
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) #主键可以省略,Django默认会为我们加上一个名为id的主键,写的话就可以改主键的名字! name = models.CharField(max_length=50) age = models.IntegerField()
(2)将模型类映射到数据库:
1.首先执行以下命令,要创建映射文件:(命令:makemigrations)
命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行(第一次的话不指定)
2.执行以下命令,将映射文件中的映射数据提交到数据库中:(命令:migrate)
3.打开数据库我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.
注意:如果要新增字段:就要先在模型类中添加对应字段的属性,并设置一个默认值,然后执行映射命令,将字段成功的映射到数据库中才算成功!
4.数据的增删改查(1)数据的增删改查----------增加数据
在视图函数中导入User模型类,然后使用下面的方法添加数据:
from .models import User def add_user(request): #方法一 taka = User(name='taka',age=18) taka.save() #方法二 xiaopo = User() xiaopo.name = 'xiaopo' xiaopo.age = 18 xiaopo.save() #方法三 aa = User.objects.get_or_create(name='xiaohong',age=18) #插入前会进行查找,如果没有相同的数据就会添加;如果有就不会 print(aa) #回返回一个元组,第一个数据是添加成功的实例;第二个数据是True或False。(添加成功为True;反之为False) User.objects.get_or_create(name='xiaohong',age=18)#插入前会进行查找,如果没有相同的数据就会添加;如果有就不会 return HttpResponse("插入数据成功!")
实现效果:
(2)数据的增删改查----------查找数据
1.首先:在模型中添加一个类属性__str__,控制查询的数据显示的格式!
from django.db import models # Create your models here. class User(models.Model): id = models.AutoField(primary_key=True) #主键可以省略,Django默认会为我们加上! name = models.CharField(max_length=50) age = models.IntegerField() def __str__(self): #此方法的作用在查询时会显示! return 'User<id=%s,name=%s,age=%s>' %(self.id, self.name, self.age)
2.然后进行查询:
在视图函数中导入User模型类,实现简单的查找
from .models import User def search_user(request): #查询所有记录对象 rs1 = User.objects.all() print("这是所有记录对象:",rs1) #通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式. #查询一个记录对象 rs2 = User.objects.get(id = 1) print("这是一个记录对象:",rs2) #查询满足条件的对象 rs3 = User.objects.filter(name='xiaoming') print("这是满足条件的对象:",rs3) return HttpResponse("查询数据成功!")
**注意:
1.all()和filter()方法返回的是QuerySet对象.
2.get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!而且如果查询不到也会报错!
**
实现效果:
3.拓展:数据的增删改查--------数据库相关的接口(QuerySet API)
1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
2.QuerySet是可迭代对象.
3.QuerySet支持切片, 不支持负索引.
4.可以用list强行将QuerySet变成列表.
(3)数据的增删改查----------删除数据
在视图函数中导入User模型类,然后使用下面的方法删除数据:
from .models import User def delete_user(request): #实例和QuerySet都具备删除方法 User.objects.get(id=1).delete() #get方法得到的是单个对象,所以是删除一个数据! User.objects.filter(age=18).delete() #删除所有age属性值为18的数据! User.objects.all().delete() #删除所有数据! s = User.objects.filter(age=18) s[1].delete() #删除名字为18的数据中的指定的一条 return HttpResponse("删除数据成功!")
(4)数据的增删改查----------修改数据
在视图函数中导入User模型类,然后使用下面的方法更新数据:
from .models import User def update_user(request): #第一种方法:先查找到数据,然后再进行属性赋值修改(对于实例的修改) rs = User.objects.get(name="xiaoming") #修改name属性值为xiaoming的name属性值为xiaowang(因为使用了get方法所以仅修改第一条!) rs.name='xiaowang' rs.save() #第二种方法:使用update方法直接修改(对于集合的修改) User.objects.filter(name='xiaowang').update(name='AAA') #修改所有name属性值为xiaowang的name属性值为AAA! User.objects.all().update(age=22) #修改所有数据的age属性值为22! return HttpResponse("修改数据成功!")
这篇关于(七)Django学习——模型基础ORM简介;Django模型映射关系;Mysql数据库连接配置;模型的创建与映射;数据的增删改查的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程