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.mzph.cn/web/56081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目实战:Qt+OpenCV仿射变换工具v1.1.0(支持打开图片、输出棋盘角点、调整偏移点、导出变换后的图等等)

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/143105881 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、Op…

如何解决JMeter响应数据乱码?

问题: 解决: 1、找到JMeter安装目录下的bin目录 2、 在bin目录下,打开" jmeter.properties "文件 3、搜索"sampleresult.default.encoding" 4、改成"sampleresult.default.encodingUTF-8",去掉前面…

数字图像处理:图像分割应用

数字图像处理:图像分割应用 图像分割是图像处理中的一个关键步骤,其目的是将图像分成具有不同特征的区域,以便进一步的分析和处理。 1.1 阈值分割法 阈值分割法(Thresholding)是一种基于图像灰度级或颜色的分割方法&…

图片写入GPS经纬高信息

近期项目中需要往java平台传输图片,直接使用QNetworkAccessManager和QHttpMultipart类即可,其他博文中有分享。 主要是平台接口对所传输图片有要求:需要包含GPS信息(经度、纬度、高度)。 Qt无法直接实现,…

教育平台的创新设计:Spring Boot实现

3系统分析 3.1可行性分析 通过对本信息化在线教学平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本信息化在线教学平台采用Spring Boot框架,JA…

LINUX1.1

目录 文件夹 文件:存储数据 文件夹:文件的目录 操作系统:广泛应用于服务器、桌面、移动设备和嵌入式系统等领域 应用软件:Linux操作系统以其稳定性、安全性和灵活性著称,广泛应用于服务器、桌面、移动设备和嵌入式系…

【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可…

笔记:WPF中MarkupExtension使用的IServiceProvider参数都有哪些

一、目的:WPF中MarkupExtension使用的IServiceProvider参数都有哪些,都是做什么的 在 WPF 中,MarkupExtension 类的 ProvideValue 方法接受一个 IServiceProvider 参数。IServiceProvider 是一个服务定位器接口,允许你在运行时获取…

深入理解 Kafka

一、引言 在当今的大数据和分布式系统时代,高效的消息传递和处理是构建可靠、可扩展应用的关键。Apache Kafka 作为一种高吞吐量的分布式发布 - 订阅消息系统,在众多领域中发挥着重要作用。本文将深入探讨 Kafka 的核心概念、架构、工作原理、应用场景以…

Axure重要元件三——中继器修改数据

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器修改数据 主要内容:显示编辑内容、表格赋值、修改数据 应用场景:更新行、表单数据行修改 案例展示: 正文…

前端算法合集-2(含面试题-美团一面)

主要考察的就是数组扁平化,由浅入深吧 ①利用tostring()和split() let arr [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]] let newarrarr.toString().split(,) let numarrnewarr.map((item)>{itemNumber(item)return item }) console.log(numarr) ②利用…

AndroidStudio移动开发:使用Service播放音乐【步骤】

目录 一、创建新application 二、准备音乐文件 三、创建项目和布局(如果需要交互界面的话,这里简单假设一个基本布局) 四、创建MusicService类 五、在MainActivity中启动和控制Service(也可以另外创建MusicActivity类&#x…

MoeCTF 2024 ---Misc方向WP

安全杂项 signin 题目描述: xdsec的小伙伴们和参赛者来上课,碰巧这一天签到系统坏了,作为老师的你,要帮他们 教师代签。 特殊提醒:luo同学今天好像在宿舍打游戏,不想来上课,这是严重的缺勤行为…

实现mysql定时执行任务

使用场景,每天想定时去执行一次数据同步,可以进行实现每天某个时间段去查询两个数据库表中数据进行数据同步 具体步骤包括两步: 先查看定时任务是否开启 SHOW VARIABLES LIKE event_scheduler; #查看是否开启,NO表示开启,默认是…

【数据分享】全国人口-人口年龄结构和抚养比(1990-2021年)

数据介绍 一级标题指标名称单位指标解释人口年末总人口万人年末人口数指每年12月31日24时的人口数。年度统计的全国人口总数内未包括香港、澳门特别行政区和台湾省以及海外华侨人数。1981年及以前人口数据为户籍统计数;1982、1990、2000、2010、2020年数据为当年人口…

Scala的多态

从编译的角度解释Scala的多态含义:在执行期间而非编译期间确定所引用对象的类型,根据实际类型调用其方法。一个编译型语言有两种类型,分别为编译类型和运行类型。程序中定义的引用变量所指向的具体类型和通过该变量发出的方法调用在编译时不确…

实操上手TinyEngine低代码引擎插件化开发

1.背景介绍 1.1 TinyEngine 低代码引擎简介 低代码开发是近些年非常热门的一种开发方式,用户可以通过可视化的方式,简单拖拽,不写代码或者编写少量代码,类似搭积木一样搭建业务应用。 TinyEngine是一个强大的低代码引擎&#x…

Redis 常用指令详解

Redis是一款开源的、高性能的键值对存储数据库,常用于缓存、会话存储以及其他需要快速访问的数据场景。本文将介绍Redis的一些常用指令,并通过代码示例进行说明。 一、连接操作指令 1. 连接 Redis 服务器 ./redis-cli -h 127.0.0.1 -p 63792. 认证&a…

计算广告第三版pdf

需要该书pdf版本的同学点赞,私信我:

拥抱云开发的未来:腾讯云数据库、云模板与AI智能化的应用场景探索

本文目录: 💡前言:技术的边界在不断延展🌟目录🌈什么是腾讯云云开发?💾云数据库:让数据成为开发的稳固基石🥑数据,不再只是数据 🛠云模板&#xf…