当前位置: 首页 > article >正文

Django操作数据库

Django操作数据库

  • 1、ORM框架
  • 2、ORM-创建数据库
  • 3、ORM-连接数据库
  • 4、ORM-操作表
    • 4.1、类创建表
    • 4.2、修改表结构
      • 4.2.1、删除表结构
      • 4.2.2、新增表结构
  • 5、ORM-增删改查
    • 5.1、新增数据
    • 5.2、删除数据
    • 5.3、查询数据
    • 5.4、更新数据

1、ORM框架

  • Django开发操作数据库很简单,内部提供了ORM框架

在这里插入图片描述

ORM可以帮助我们做两件事:
创建、修改、删除数据库中的表(不用写SQL语句),但是无法创建数据库
操作表中的数据(不用写SQL语句),Django会利用ORM将代码翻译成SQL语句来操作数据库

  • 使用ORM之前还需安装第三方模块
pip install mysqlclient

在这里插入图片描述

2、ORM-创建数据库

由于ORM无法创建数据库,因此需要我们利用mysql来创建。

  • 启动mysql并输入密码登录
mysql -u root -p
  • 创建数据库
 create database djangodb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
  • 查询数据库看是否创建成功
 show databases;

3、ORM-连接数据库

  • 在settings.py文件中进行配置和修改

在这里插入图片描述

  • 删去db.sqlite3,并修改连接数据库的代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 引擎
        'NAME': 'djangodb',  # 数据库名字
        'USER': 'root',   # 用户名
        'PASSWORD': 'root',    # 密码
        'HOST': '127.0.0.1',  # 安装MySQL的机器,一般是本机
        'PORT': 3306,
    }
}

4、ORM-操作表

4.1、类创建表

  • 在models.py中创建一个类,类中写入若干字段名

在这里插入图片描述

  • 编写类之后,ORM会根据类自动执行下述SQL语句来生成表(下述的SQL语句不需要自己写)
create table app01_userinfo(
    id bigint auto_increment primary key,
    name varchar(50),
    password varchar(60),
    age int
)
  • 表名:app名称_类名小写
  • 类中的字段对应表中的列
  • 自动生成id列,且是自增、主键
  • 此时我们查询数据库可以看到并未创建该表

在这里插入图片描述

  • 上述操作只是生成表,如果想让django在数据库中创建该表,还需要执行下述命令
python manage.py makemigrations
python manage.py migrate

执行命令之前需要注意以下几点:

  • 确保app提前被注册
  • 当前的目录为根目录,必须包含manage.py,这样它才会发挥作用
  • 使用的python解释器必须安装了mysqlclient
  • 查询数据库的表时可以看到已经创建成功

在这里插入图片描述

生成很多其他的表是因为Django在执行上述命令时会去找每个app的models中的类来生成表,而Django默认提供了很多其他的app,这些app也依赖于一些表,因此会生成内部默认的一些表,如果不需要注释掉即可。
在这里插入图片描述

4.2、修改表结构

4.2.1、删除表结构

当想要删除表或表中的列时,只需要将models.py中的对应代码删掉或注释掉,重新执行下述命令即可

python manage.py makemigrations
python manage.py migrate

4.2.2、新增表结构

在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据

  • 在表中新增size列

在这里插入图片描述

  • 重新执行上述命令时会出现下述选择(这里选择第一种选择)

在这里插入图片描述

  • 第二种选择是在代码中添加默认值

在这里插入图片描述

  • 第三种选择是允许数据为空

在这里插入图片描述

5、ORM-增删改查

5.1、新增数据

类名.objects.create(字段名=,...)

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

5.2、删除数据

  • 根据筛选条件删除数据
类名.objects.filter(筛选条件).delete()
  • 删除所有数据
类名.objects.all().delete()

5.3、查询数据

  • 获取符合条件的所有数据
data_list = 类名.objects.all()
  • 根据筛选条件获取数据
data_list = 类名.objects.filter(筛选条件)
  • 获取第一条数据
obj = 类名.objects.filter(筛选条件).first()

all()和filter()获取的数据类型均为QuerySet类型,可以看作数据列表类型,即[对象,对象,对象],而first()获得的是对象类型

5.4、更新数据

  • 更新所有数据
类名.objects.all().update(更新的字段名=新数据)
  • 根据筛选条件更新数据
类名.objects.filter(筛选条件).update(更新的字段名=新数据)

http://www.kler.cn/news/354648.html

相关文章:

  • 几种HTTP请求参数的简单介绍
  • JavaSE之抽象类和接口
  • C++ OpenCV实现简单的自瞄脚本(OpenCV实战)
  • 永恒之蓝漏洞
  • 毕业设计之—基于ManTra-Net的图像篡改检测方法研究与应用实现
  • uni-app关闭底部系统导航栏的控制按钮BUG
  • SSTI模板注入+CTF实例
  • TS学习——type与interface的异同点
  • c++基础知识复习(1)
  • pdf删除几个页面怎么操作?PDF页面删除的快捷方法
  • Unity UGUI SuperScrollView介绍
  • ETL技术在金蝶云星空与旺店通WMS集成中的应用
  • 期货交易程序化,哪些API可供选择及如何使用?
  • taro小程序如何全局监听路由变化?
  • 基于SpringBoot+Vue+uniapp微信小程序的乡村政务服务系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • AI学习指南深度学习篇-生成对抗网络的变体及扩展
  • 02 go语言(golang) - 包和模块
  • 什么是 SQL 命令?SQL 如何工作?
  • Maven基于构建阶段分析多余的依赖
  • Linux 下find常用命令整理(更新ing)