我是小咸鱼,重点来了~
模型层
负责跟数据库之间进行通信
模型
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笔记三写到这啦,今天学校女生节,楼下音乐一曲接一曲,祝所有女孩子女生节快乐呀~😀