python想法简友广场

Python(五十)模型基础

2022-01-15  本文已影响0人  Lonelyroots

从2021年9月2日发文至今,Python系列(包括代码在内)共计92026个字、五十篇!

1. Django的ORM简介

1.1. Django的ORM系统的分析:

  1. ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
  2. ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
Django的ORM系统分析

1.2. Django模型映射关系:

  1. 模型类必须都写在app下的models.py文件中。
  2. 模型如果需要映射到数据库,所在的app必须被安装。
  3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性。

2. 数据库连接配置

python与mysql数据库连接配置:
先在Linux虚拟机中,输入workon django15-16:进入到之前创建的django15_16的虚拟环境中,然后输入mysql -uadmin -p:回车并输入密码,即可进入到mysql数据库中,然后先创建数据库Django15_16:CREATE DATABASE Django15_16;

在如下界面,使用startapp models_test指令,新创建一个名为models_test的app: 配置已安装的app:
在settings文件里写好连接的MySQL数据库,如下所示:

在django15_16主项目的__init__.py文件中安装数据库连接器,让连接器去寻找配置信息。

# 六、模型基础:

import pymysql

pymysql.install_as_MySQLdb()        # 安装数据库连接器,连接器去寻找配置信息。

3. 模型的创建与映射

models.py代码:

# 六、模型基础:一、Django模型映射关系

from django.db import models

# Create your models here.

class User(models.Model):       # 继承了模型类
    # 这里是类属性,但也是数据库里的字段
    id = models.AutoField(primary_key=True)     # id,自增长且主键约束
    name = models.CharField(max_length=30)      # 字符类型,默认情况下为非空约束
    # name = models.CharField(max_length=30,null=True)      # 字符类型,允许为空
    age = models.IntegerField()         # 整型

要创建映射文件:
①可以在pycharm里输入makemigrations models_test
②也可以在linux虚拟机里输入python manage.py makemigrations models_test


然后将数据库的表格下载下来。

可以清楚地发现0001_initial.py的文件出现在你创建的模板app models_test文件夹里,点开查看如下图所示:

也可以登录通过端口转发后远程连接的Linux虚拟机,输入如下的指令,查看表—如果有忘记的可以回过头来看看我发的Linux系统如何操作MySQL数据库的教程。

可以在Linux系统中输入python manage.py migrate models_test:执行以下命令,将映射文件中的映射数据提交到数据库中。也可以在pycharm里输入migrate models_test。【注】该步命令应与创建映射文件的命令成对存在,不可以在两步操作之间,对数据库进行修改。

数据库操作

  1. 先设计数据库
  2. 创建库和表
  3. 如果出现模型类和数据表不一致的情况:先删除pycharm里的所有映射文件,再删除Ubuntu里的所有映射文件,接着将映射表对于APP的所有记录删除,最后重新映射提交。

4. 数据的增删改查

models_test这个app文件夹中的urls.py文件代码如下:

# 六、模型基础:
from django.urls import path
# 从同级目录下导入文件
from . import views

urlpatterns = [
    path('add/',views.add_user),    # 增
    path('select/',views.select_user),     # 查
    path('update/',views.update_user),   # 改
    path('delete/',views.delete_user),     # 删
]

下方代码中重写了__str__这个魔术方法,不然增删改查操作中,打印出来的数据都为类对象。

models_test下方的models.py模型文件如下所示:

# 六、模型基础:三、Django模型映射关系

from django.db import models

# Create your models here.

class User(models.Model):       # 继承了模型类
    # 这里是类属性,但也是数据库里的字段
    id = models.AutoField(primary_key=True)     # id,自增长且主键约束
    name = models.CharField(max_length=30)      # 字符类型,默认情况下为非空约束
    # name = models.CharField(max_length=30,null=True)      # 字符类型,允许为空
    age = models.IntegerField()         # 整型

    # # 修改表名
    # class Meta:
    #     db_table = 'user'

    def __str__(self):
        return f'id:{self.id},name:{self.name},age:{self.age}'

4.1. 增

from django.shortcuts import render
from django.http import HttpResponse
from .models import User        # 导入.models这个文件目录下的User模型类

# Create your views here.

# 六、模型基础:四、数据的增删改查

# 添加数据
def add_user(request):
    # # 方法一,类的实例化赋值。
    # zf = User(name='追风',age=20)
    # zf.save()       # 保存数据
    # return HttpResponse('添加成功!')

    # # 方法二,类的实例化赋值。
    # chen = User()
    # chen.name = '晨'
    # chen.age = 21
    # chen.save()
    # return HttpResponse('添加成功!')

    # # 方法三,使用create方法直接创建对象,作为数据表的记录。
    # User.objects.create(name='摸鱼',age=80)
    # return HttpResponse('添加成功!')

    # 前三个方法都会重复添加,第四个方法不会。
    # 方法四,使用get_or_create方法可以防止添加重复的顺序
    User.objects.get_or_create(name='chenhong',age='21')
    return HttpResponse('添加成功!')

4.2. 查

from django.shortcuts import render
from django.http import HttpResponse
from .models import User        # 导入.models这个文件目录下的User模型类

# Create your views here.

# 六、模型基础:四、数据的增删改查


# 查询数据
def select_user(request):
    # # 查询所有数据
    # res = User.objects.all()      # all查询所有数据
    # print(res)        # 这里重写了str方法,具体可看Python(十三)面向对象高级里的输出魔术方法。
    # return HttpResponse('查询成功!')

    # 条件查询:
    res = User.objects.filter(name='追风')        # filter查询到多少数据,就得到多少数据。
    # res = User.objects.get(id=4)        # get只能用于唯一值的查询,不能同时查询多条数据。
    print(res)
    return HttpResponse('条件查询成功!')

4.3. 改

from django.shortcuts import render
from django.http import HttpResponse
from .models import User        # 导入.models这个文件目录下的User模型类

# Create your views here.

# 六、模型基础:四、数据的增删改查


# 修改数据
def update_user(request):
    # # 方法一:
    # res = User.objects.get(id=1)
    # res.age = 21
    # res.save()
    # return HttpResponse('修改成功!')

    # 方法二
    # 这种方式修改只能用filter,因为get没有update方法
    User.objects.filter(name='摸鱼').update(age=70)
    return HttpResponse('修改成功!')

4.4. 删

from django.shortcuts import render
from django.http import HttpResponse
from .models import User        # 导入.models这个文件目录下的User模型类

# Create your views here.

# 六、模型基础:四、数据的增删改查


# 删除数据
def delete_user(request):
    # # 删除部分数据,get和filter都有delete方法。
    # User.objects.get(id=2).delete()
    # User.objects.filter(id=2).delete()
    # return HttpResponse('删除成功!')

    # 删除全部数据。
    User.objects.all().delete()
    return HttpResponse('删除成功!')

文章到这里就结束了!希望大家能多多支持Python(系列)!六个月带大家学会Python,私聊我,可以问关于本文章的问题!以后每天都会发布新的文章,喜欢的点点关注!一个陪伴你学习Python的新青年!不管多忙都会更新下去,一起加油!

Editor:Lonelyroots

上一篇下一篇

猜你喜欢

热点阅读