(七)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. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.

2.数据库的连接配置(使用Mysql为例)

(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数据库连接配置;模型的创建与映射;数据的增删改查的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程