Django学习笔记三

这篇博客详细介绍了Django中的ORM框架和模型层,包括模型类的定义、数据库迁移、Meta类的使用以及增删改查操作。通过Django Shell进行数据交互,展示了如何在Python环境中操作数据库。此外,还提到了数据库配置、数据库迁移过程以及伪删除的概念。内容适合Django初学者了解和掌握数据库操作。
摘要由CSDN通过智能技术生成

我是小咸鱼,重点来了~

模型层

负责跟数据库之间进行通信

模型

1、模型是一个python类,它是由 django.db.models.Model 派生出的子类
2、一个模型类代表数据库中的一张数据表
3、模型类中每一个类属性都代表数据库中的一个字段
4、模型是数据交互的接口,是表示和操作数据库的方法和方式

ORM框架

ORM(Object Relational Mapping)即对象关系映射,他是一种程序技术,它允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库

作用:
1、建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库
2、根据设计的模型类生成数据库中的表格
3、通过简单的配置就可以进行数据库的切换

优点:
1、只需要面向对象编程,不需要面向数据库编写代码
	对数据库的操作都转化成对类属性和方法的操作
	不用编写各种数据库的sql语句
2、实现了数据模型与数据库的解耦,屏蔽了不同数据库操作上的差异
	不在关注用的是MySQL,Oracle,,,等数据库的内部细节
	通过简单的配置可以轻松更换数据库,而不需要修改代码

缺点:
1、对于复杂业务,使用成本较高
2、根据对象的操作转换成SQL语句,根据查询结果转化成对象,在映射过程中有性能损失

在这里插入图片描述

一、环境配置
  • 安装 mysqlclient【版本1.3.13以上】
  • 安装前确认 ubuntu 是否已安装 python3-dev 和 default-libmysqlclient-dev
1、sudo apt list --installed | grep -E 'libmysqlclient-dev|python3-dev'
2、若命令无输出则需要安装
sudo apt-get install python3-dev default-libmysqlclient-dev
  • sudo pip3 install mysqlclient
    在这里插入图片描述

1、安装出现问题
在这里插入图片描述

2、解决方法:先检查包名是否输错,没错的话更新源后重试即可
1)、命令行打开源文件 sources.list

sudo gedit /etc/apt/sources.list

2)、修改sources.list【例如修改为阿里源】

#  阿里镜像源

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

3)、更新并升级

sudo apt-get update && sudo apt-get upgrade

安装成功如图:
在这里插入图片描述
在这里插入图片描述
3、给ubuntu安装下mysql-server mysql-client
在这里插入图片描述
安装完可以修改mysql的用户名和密码,参考Ubuntu安装mysql

二、创建数据库
1、创建数据库
2、进入MySQL数据库执行:
	create database 数据库名 default charset utf8
	通常数据库名跟项目名保持一致
3、settings.py里进行数据库的配置
	修改DATABASES配置项的内容,由sqlite3 变为mysql

在这里插入图片描述
在这里插入图片描述

三、模型示例

1、添加一个bookestore的 app,并注册

python3 manage.py startapp bookstore

在这里插入图片描述

在这里插入图片描述

2、添加模型类

在应用下的models.py中编写模型类
from django.db import models
class 模型类名(models.Model):
	字段名 = models.字段类型(字段选项)

在这里插入图片描述

3、数据库迁移

迁移是django同步我们对模型所作更改(添加字段,删除模型等)到我们的数据库模式的方式
1、生成迁移文件:python3 manage.py makemigrations
2、执行迁移脚本程序:python3 manage.py migrate

在这里插入图片描述
在这里插入图片描述

4、Meta类
使用内部 Meta 类来给模型赋予属性,Meta类下有很多内建的类属性,可对模型类做一些控制
举例:修改bookstore_author的表名(修改完仍然要 makemigrations & migrate)
在这里插入图片描述

在这里插入图片描述

增删改查

Django Shell

在django 提供了一个交互式的操作项目叫 django shell ,它能够在交互模式用项目工程的代码执行相应的操作
利用 django shell 可以代替编写 view 的代码来直接操作
🐖:项目代码发生变化时,重新进入 django shell
启动方式:
python3 manage.py shell
在这里插入图片描述

一、增
django ORM 使用一种直观的方式把数据库表中的数据表示成python对象
创建数据中每一条记录就是创建一个数据对象
MyModel.objects.create(属性1=值1,属性2=值1,,,)
	成功:返回创建好的实体对象
	失败:抛出异常

在这里插入图片描述

二、查
  • 数据库的查询需要使用管理器对象进行
  • 通过 MyModel.objects 管理器方法调用查询方法
方法说明
all()查询全部记录,返回QuerySet 查询对象
get()查询符合条件的单一记录
filter()查询符合条件的多条记录
exclude()查询符合条件之外的全部记录

在这里插入图片描述
1、V层拿了M层的数据传给T层渲染
在这里插入图片描述
在这里插入图片描述

三、改
1、更新单个实体的某些字段值的步骤:
1)、查:通过get()得到要修改的实体对象
2)、改:通过对象.属性的方式修改数据
3)、保存:通过对象.save()保存数据

2、批量更新数据:
直接调用 QuerySet 的 update(属性=值)实现批量修改
举例:
books = Book.objects.filter(id__gt=3)
books.update(price=0)

捋一下思路:all_book.html 页面的更新按钮会链接到 book_update.html 页面,book_update.html 页面提交的数据会传到 view.py 处理(功能函数在这里写),处理完,book_update.html 的提交按钮会定向到 all_book.html 这个页面,完成修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果就是实现了更新价格的功能。

四、删
1、单个数据删除:
1)、查找查询结果对应的一个数据对象
2)、调用这个数据对象的delete()方法实现删除
	auth = Author.objects.get(id=1)
	auth.delete()

2、批量删除:
1)、查找查询结果集中满足条件的全部QuerySet查询集合对象
2)、调用查询集合对象的delete()方法实现删除
auths = Author.objects.filter(age__ft=65)
auths.delete()

3、伪删除
通常不会轻易仔业务里把数据真正删除,取而代之的是做伪删除,即在表中添加一个布尔型字段(is_active),默认是True;执行删除时,将欲删除数据的is_active字段设置为False
🐖:用伪删除时,确保显示数据的地方,均加了 is_active=True的过滤查询

在这里插入图片描述
捋一下思路:通过获取查询字符串的 book_id 拿到要删除的 book的id,将其 is_active 改成 false,302跳转到 all_book
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

效果:点击删除最后一本书,数据库对应的is_active变为0,页面没有显示该本书

django笔记三写到这啦,今天学校女生节,楼下音乐一曲接一曲,祝所有女孩子女生节快乐呀~😀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值