六.模型基础 2021-03-03

六.模型基础

1.Django的ORM简介

1.1什么是ORM

简介:ORM一般指对象关系映射。对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换

1.2Django中ORM 与数据库的关系

1.使用ORM的优势 -----不用直接编写SQL代码,只需像操作对象一样从数据库操作数据 

2.ORM 与SQL之间的关系

 

3.Django中通过ORM实现model与SQL的对应关系

  • 模型类对应sql的数据表
  • 属性类对应表里的字段名

注:

1. 模型类必须都写在app下的models.py文件中。

2. 模型如果需要映射到数据库,所在的app必须被安装.

3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性 

1.3 在Django中配置mysql数据库的整体流程

1数据库配置

2连接器配置

3django模型的编写   

4模型的映射            

5对数据进行增删改查

2.数据库的配置

2.1.在settings.py中配置DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',                 # 数据库引擎
        'NAME': 'look',                                           #数据库名称
        'USER': 'root',                                       # 链接数据库的用户名
        'PASSWORD': 'qwe123',                                 # 链接数据库的密码
        'HOST': '127.0.0.1',                                  # mysql服务器的域名和ip地址
        'PORT': '3306',                                       # mysql的一个端口号,默认是3306

    }
}

1.先建立数据库,被2.1步骤连接(见代码)

  1. mysql -uroot  -pqwe123             进入mysql
  2. show  databases;                    查看所有的数据库
  3. create database look charset=utf8;      建立新的数据库
  4. use look;                                 使用数据库
  5. ctrl + z                                     退出数据库

2.2在虚拟环境中安装pymysql

命令  pip install pymysql

1.先进入虚拟环境,在项目中安装pymysql

  1. workon                     查看虚拟环境
  2. workon   name          运行虚拟环境
  3. pip  list                      查看所有的库
  4. pip install pymysql    安装库

2.3在Django项目中连接pymysql

设置连接器为pymysql:

在主目录下的的__init__.py文件添加下面两句

  • import pymysql

  • pymysql.install_as_MySQLdb()

报红多下载几次,这是远程的问题,没同步

2.4 模型类与数据库关联

1) 数据库表名

模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名。

可通过db_table指明数据库表名。

2) 关于主键

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

3) 属性命名限制

不能是python的保留关键字。

不允许使用连续的下划线,这是由django的查询方式决定的。

定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

属性=models.字段类型(选项)

3.模型的创建与映射

3.1.创建模型类

1.在app下面的models.py中创建django的模型类.

from django.db import models

# Create your models here.
'''
继承自模型类models
模型类和数据库表的关系
属性和表的字段的对应关系

'''
class User(models.Model):
    #建立模型类
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    gender = models.BooleanField()         #性别除了男就是女用bool

    class Meta:
        db_table = 'User'         #给定表名

    def __str__(self):
        #返回数据库的属性
        return self.name

3.2将模型映射到数据库

1.首先执行以下命令,要创建映射文件

python  manage.py   makemigrations

命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写所有的app都执行.

2.执行以下命令,将映射文件中的映射数据提交到数据库中

python  manage.py   migrate

3.进入mysql 查看映射的数据库表

  1. mysql -uroot  -pqwe123             进入mysql
  2. show  databases;                    查看所有的数据库
  3. use look;                                 使用数据库
  4. show tables                           查看数据库

打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.

注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.

在执行前,保证我们创建模型的APP是已经注册过的APP


注意:在运行之前一定要将PyCharm的程序上传到虚拟机,不然会报一下错误

pymysql.err.OperationalError: (1046, 'No database selected')

django.db.utils.OperationalError: (1046, 'No database selected')

执行过程:

  1. workon                     查看虚拟环境
  2. workon   name         运行虚拟环境
  3. ls                              查看目录下的文件
  4. cd 项目文件              进入文件
  5. python manage.py makemigrations        创建映射文件
  6. python manage.py migrate                     映射文件中的映射数据提交到数据库中
  7. show tables               查看建立的表   

从Django的模型映射到Mysql的表格

4.数据的增删改查(非详细)

4.1使用ORM进行查询数据库

1.在子应用的views中导入models.py文件,写显示函数

from django.shortcuts import render

from django.http import HttpResponse
from  .models import User         #导入建立的User模型
# Create your views here.


def Mysql_index_01(request):
    # all 查询一个user的实例对象
    # get 查询某个属性
    user = User.objects.all()
    return render(request,'MySQL.html',context={
        'user':user
    })



2.设置子路由的url

from django.urls import path,re_path
from  .import views

urlpatterns = [
    
    #查
    path('Mysql_index_01',views.Mysql_index_01,name = 'Mysql_index_01'),
    #增
    path('add_user',views.add_user,name = 'add_user'),

]

3.建立MySQL.html模板

  <a href="">{{user}}</a>

运行结果:

4.2添加数据

1.在子应用的views中导入models.py文件,写显示函数

from django.shortcuts import render

from django.http import HttpResponse
from  .models import User         #导入建立的User模型
# Create your views here.


def add_user(request):
    #在我们的模型中跟gender不是男就是女,用True或者False
    user = User(name = '小明',age = '18',gender = True)
    user.save()
    return HttpResponse('添加成功')


2.设置子路由的url

from django.urls import path,re_path
from  .import views

urlpatterns = [
    #增
    path('add_user',views.add_user,name = 'add_user'),

]

3.运行结果:

4.在虚拟机中的MySql数据表

5.在不变添加数据的情况:运行两次,再次添加两个小明

把添加数据改变后,添加了大明的数据

4.3查询数据

1.在子应用的views中导入models.py文件,写显示函数

from django.shortcuts import render

from django.http import HttpResponse
from  .models import User         #导入建立的User模型
# Create your views here.

def seach_look(request):
    #查询全部的结果
    # seach = User.objects.all()
    # get 返回的对象具有唯一的性质,如果符合条件的对象有多个,则get报错
    seach = User.objects.get(name = '大明')
    print(seach)
    return HttpResponse("查询成功%s"%seach)

2.设置子路由的url

from django.urls import path,re_path
from  .import views

urlpatterns = [
    #查
    path('seach_look',views.seach_look,name = 'seach_look%s'),

]

3.运行结果

4.4删除数据

1.在子应用的views中导入models.py文件,写显示函数

from django.shortcuts import render

from django.http import HttpResponse
from  .models import User         #导入建立的User模型
# Create your views here.

def delete_user(request):
    #删除
    #删除id为2的数据
    User.objects.get(id = 2).delete()
    return HttpResponse("删除成功")

2.设置子路由的url

from django.urls import path,re_path
from  .import views

urlpatterns = [
    #删除
    path('delete_user',views.delete_user,name = 'delete_user'),
]

3.运行结果

4.在虚拟机中的MySql数据表             

注:由于是自定义增长,所以删除以后ID不会改变

4.5 更改数据

1.在子应用的views中导入models.py文件,写显示

from django.shortcuts import render

from django.http import HttpResponse
from  .models import User         #导入建立的User模型
# Create your views here.

def update_user(request):
    #更改
    #方法一
    user = User.objects.get(id = 3)
    user.name = '莉莉'
    user.save()
    #方法二
    User.objects.filter(name ='大明').update(name = 'LIN')
    #把所有年龄改为21
    User.objects.update(age = 21)
    return HttpResponse("修改成功")

2.设置子路由的url

from django.urls import path,re_path
from  .import views

urlpatterns = [
    
    #修改
    path('update_user',views.update_user,name = 'update_user'),
]

3.运行结果

4.在虚拟机中的MySql数据表前后对比 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值