
模型层我是小咸鱼,重点来了~
负责跟数据库之间进行通信
模型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 提供了一个交互式的 *** 作项目叫 django shell ,它能够在交互模式用项目工程的代码执行相应的 *** 作
利用 django shell 可以代替编写 view 的代码来直接 *** 作
:项目代码发生变化时,重新进入 django shell
启动方式:
python3 manage.py shell
django ORM 使用一种直观的方式把数据库表中的数据表示成python对象 创建数据中每一条记录就是创建一个数据对象 MyModel.objects.create(属性1=值1,属性2=值1,,,) 成功:返回创建好的实体对象 失败:抛出异常二、查
- 数据库的查询需要使用管理器对象进行
- 通过 MyModel.objects 管理器方法调用查询方法
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笔记三写到这啦,今天学校女生节,楼下音乐一曲接一曲,祝所有女孩子女生节快乐呀~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)