Python(五十)模型基础
从2021年9月2日发文至今,Python系列(包括代码在内)共计92026个字、五十篇!
1. Django的ORM简介
1.1. Django的ORM系统的分析:
Django的ORM系统分析
- ORM概念:对象关系映射(Object Relational Mapping,简称ORM)
- ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。
1.2. Django模型映射关系:
- 模型类必须都写在app下的models.py文件中。
- 模型如果需要映射到数据库,所在的app必须被安装。
- 一个数据表对应一个模型类,表中的字段,对应模型中的类属性。
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
。【注】该步命令应与创建映射文件的命令成对存在,不可以在两步操作之间,对数据库进行修改。
数据库操作
- 先设计数据库
- 创建库和表
- 如果出现模型类和数据表不一致的情况:先删除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