Django教程(003):orm操作数据库

文章目录

  • 1 orm连接Mysql
    • 1.1 安装第三方模块
    • 1.2 ORM
      • 1.2.1、创建数据库
      • 1.2.2、Django连接数据库
      • 1.2.3、django操作表
      • 1.2.4、创建和修改表结构
      • 1.2.5、增删改查
        • 1.2.5.1 增加数据
        • 1.2.5.2 删除数据
        • 1.2.5.3 获取数据
        • 1.2.5.4 修改数据

1 orm连接Mysql

Django为了使操作数据库更加简单,提供了ORM框架。

1.1 安装第三方模块

pip install mysqlclient

安装成功

在这里插入图片描述

注意,如果安装报错,去官网下载mysqlclient.whl包进行安装,下载地址https://pypi.org/project/mysqlclient/#files,选择适合自己Python版本的包即可

在这里插入图片描述

1.2 ORM

ORM可以帮助我们做两件事:

  • 创建、修改、删除数据库中的表

  • 操作表中的数据(不用写sql语句

    • select
      insert
      update
      

1.2.1、创建数据库

  • 启动mysql服务
  • 自带工具创建数据库
CREATE DATABASE django_learning DEFAULT CHARSET UTF8 COLLATE utf8_general_ci;

在这里插入图片描述

1.2.2、Django连接数据库

创建新的django项目mysite2

django-admin startproject mysite2

创建app

python manage.py startapp app01

找到mysite2/mysite2/settings.py文件,添加DATABASE配置文件

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django_learning','USER': 'root','PASSWORD': '3535','HOST': '127.0.0.1','PORT': '3306',}
}

1.2.3、django操作表

  • 创建表
  • 删除表
  • 修改表

models.py文件中:

在这里插入图片描述

class UserInfo(models.Model):name = models.CharField(max_length=32)password = models.CharField(max_length=64)age = models.IntegerField()

执行上述命令的时候,相当于执行了以下sql代码

"""
create table app01_userinfo(id integer primary key autoincrement,name varchar(32),password varchar(64),age int
)
"""

注意:,这个时候数据库是不存在表的

在这里插入图片描述

执行命令创建表,注意:执行命令之前,要注册app

在这里插入图片描述

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述

再次查看django_learning数据库中的表信息,app01_userinfo表已经创建成功:

在这里插入图片描述

1.2.4、创建和修改表结构

需要创建表的时候,只需要再次在settings.py中添加如下代码即可,比如需要创建部门表和角色表

class Department(models.Model):title = models.CharField(max_length=32)class Role(models.Model):caption = models.CharField(max_length=32)

接着重新执行如下命令

python manage.py makemigrations
python manage.py migrate

查看数据库表信息,创建成功

在这里插入图片描述

注意,删除表或者字段的时候,只需要把代码注释掉,然后重新执行命令就行。

1.2.5、增删改查

1.2.5.1 增加数据

urls.py中添加以下代码

path("orm/", views.orm),

views.py中添加以下代码

def orm(request):Department.objects.create(title='销售部')Department.objects.create(title='IT部')Department.objects.create(title='运行部')return HttpResponse("成功")

启动django程序

python manage.py runserver

浏览器访问http://127.0.0.1:8000/orm/
在这里插入图片描述

查看app01_department表中是否有数据

在这里插入图片描述

接着向userinfo表中添加数据

def orm(request):# Department.objects.create(title='销售部')# Department.objects.create(title='IT部')# Department.objects.create(title='运行部')UserInfo.objects.create(name="张三", password="123", age=18)UserInfo.objects.create(name="李四", password="123", age=18)return HttpResponse("成功")

刷新浏览器,查看数据

在这里插入图片描述

1.2.5.2 删除数据
def orm(request):# 删除id为2的数据UserInfo.objects.filter(id=2).delete()# 删除所有数据Department.objects.all().delete()return HttpResponse("成功")

修改代码之后,刷新浏览器,重新查看数据库中的数据

在这里插入图片描述

1.2.5.3 获取数据

添加如下代码:

def orm(request):data_list = UserInfo.objects.all()for data in data_list:print(data.id, data.name, data.password, data.age)return HttpResponse("成功")

刷新浏览器之后,查看控制台的输出

在这里插入图片描述

根据id获取数据,当你确定数据只有一行的时候,可以使用.first()来直接获取数据对象,而不是data_list

def orm(request):data_list = UserInfo.objects.all()for data in data_list:print(data.id, data.name, data.password, data.age)data = UserInfo.objects.filter(id=3).first()print(data.id, data.name, data.password, data.age)return HttpResponse("成功")

在这里插入图片描述

1.2.5.4 修改数据

可以全部修改,也可以根据id条件修改

def orm(request):# 更新所有的UserInfo.objects.all().update(password='999')UserInfo.objects.filter(id=3).update(password='Lisi123')return HttpResponse("成功")

刷新浏览器,查看数据信息,修改成功

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873945.shtml

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

相关文章

Linux shell编程学习笔记65: nice命令 显示和调整进程优先级

0 前言 我们前面学习了Linux命令ps和top,命令的返回信息中包括优先序(NI,nice) ,我们可以使用nice命令来设置进程优先级。 1 nice命令 的功能、格式和选项说明 1.1 nice命令 的功能 nice命令的功能是用于调整进程的…

AP ERP与汉得SRM系统集成案例(制药行业)

一、项目环境 江西某医药集团公司,是一家以医药产业为主营、资本经营为平台的大型民营企业集团。公司成立迄今,企业经营一直呈现稳健、快速发展的态势, 2008 年排名中国医药百强企业前 20 强,2009年集团总销售额约38亿元人民币…

原码、补码、反码、移码是什么?

计算机很多术语翻译成中文之后,不知道是译者出于什么目的,往往将其翻译成一个很难懂的名词。 奇怪的数学定义 下面是关于原码的“吐槽”,可以当作扩展。你可以不看,直接去下一章,没有任何影响。 原码的吐槽放在前面是…

配置单区域OSPF

目录 引言 一、搭建基础网络 1.1 配置网络拓扑图如下 1.2 IP地址表 二、测试每个网段都能单独连通 2.1 PC0 ping通Router1所有接口 2.2 PC1 ping通Router1所有接口 2.3 PC2 ping通Router2所有接口 2.4 PC3 ping通Router2所有接口 2.5 PC4 ping通Router3所有接口 2.…

Git仓库拆分和Merge

1. 问题背景 我们原先有一个项目叫open-api,后来想要做租户独立发展,每个租户独立成一个项目,比如租户akc独立部署一个akc-open-api,租户yhd独立部署一个yhd-open-api,其中大部分代码是相同的,少量租户定制…

2024牛客暑期多校训练营1——A,B

题解&#xff1a; 更新&#xff1a; k1的时候要乘n 代码&#xff1a; #include<bits/stdc.h> #define int long long using namespace std; const int N5e35; typedef long long ll; typedef pair<int,int> PII; int T; int n,m,mod; int fac[N][N]; int dp[N][…

笔记:Few-Shot Learning小样本分类问题 + 孪生网络 + 预训练与微调

内容摘自王老师的B站视频&#xff0c;大家还是尽量去看视频&#xff0c;老师讲的特别好&#xff0c;不到一小时的时间就缕清了小样本学习的基础知识点~Few-Shot Learning (1/3): 基本概念_哔哩哔哩_bilibili Few-Shot Learning&#xff08;小样本分类&#xff09; 假设现在每类…

【Linux】基础I/O——动静态库的制作

我想把我写的头文件和源文件给别人用 1.把源代码直接给他2.把我们的源代码想办法打包为库 1.制作静态库 1.1.制作静态库的过程 我们先看看怎么制作静态库的&#xff01; makefile 所谓制作静态库 需要将所有的.c源文件都编译为(.o)目标文件。使用ar指令将所有目标文件打包…

谷粒商城实战笔记-38-前端基础-Vue-指令-单向绑定双向绑定

文章目录 一&#xff0c;插值表达式注意事项1&#xff1a;不适合复杂的逻辑处理注意事项2&#xff1a;插值表达式支持文本拼接注意事项3&#xff1a;插值表达式只能在标签体中 二&#xff0c;v-html和v-textv-textv-html区别总结&#xff1a;最佳实践 三&#xff0c;v-model复选…

FastAPI 学习之路(五十六)将token缓存到redis

在之前的文章中&#xff0c;FastAPI 学习之路&#xff08;二十九&#xff09;使用&#xff08;哈希&#xff09;密码和 JWT Bearer 令牌的 OAuth2&#xff0c;FastAPI 学习之路&#xff08;二十八&#xff09;使用密码和 Bearer 的简单 OAuth2&#xff0c;FastAPI 学习之路&…

阵列信号处理学习笔记(二)--空域滤波基本原理

阵列信号 阵列信号处理学习笔记&#xff08;一&#xff09;–阵列信号处理定义 阵列信号处理学习笔记&#xff08;二&#xff09;–空域滤波基本原理 文章目录 阵列信号前言一、阵列信号模型1.1 信号的基本模型1.2 阵列的几何构型1.3 均匀直线阵的阵列信号基本模型 总结 前言…

嵌入式面试总结

C语言中struct和union的区别 struct和union都是常见的复合结构。 结构体和联合体虽然都是由多个不同的数据类型成员组成的&#xff0c;但不同之处在于联合体中所有成员共用一块地址空间&#xff0c;即联合体只存放了一个被选中的成员&#xff0c;结构体中所有成员占用空间是累…

【网络】windows和linux互通收发

windows和linux互通收发 一、windows的udp客户端代码1、代码剖析2、总体代码 二、linux服务器代码三、成果展示 一、windows的udp客户端代码 1、代码剖析 首先我们需要包含头文件以及lib的一个库&#xff1a; #include <iostream> #include <WinSock2.h> #inclu…

【模板代码】用于编写Threejs Demo的模板代码

基础模板代码 使用须知常规模板代码常规Shader模板代码 使用须知 本模板代码&#xff0c;主要用于编写Threejs的Demo&#xff0c;因为本人在早期学习的过程中&#xff0c;大量抄写Threejs/examples下的代码以及各个demo站的代码&#xff0c;所以养成了编写Threejs的demo的习惯…

SAP 采购订单 Adobe 消息输出

目录 1 简介 2 业务数据例子 3 选择增强 & 代码 1&#xff09;BADI: MM_PUR_S4_PO_MODIFY_HEADER 2&#xff09;BADI: MM_PUR_S4_PO_MODIFY_ITEM 4 自定义 Adobe form 1&#xff09;PO Master form 2&#xff09;PO form 5 前台主数据配置 6 后台配置 1&#xf…

掌握Rust:函数、闭包与迭代器的综合运用

掌握Rust&#xff1a;函数、闭包与迭代器的综合运用 引言&#xff1a;解锁 Rust 高效编程的钥匙函数定义与模式匹配&#xff1a;构建逻辑的基石高阶函数与闭包&#xff1a;代码复用的艺术迭代器与 for 循环&#xff1a;高效数据处理的引擎综合应用案例&#xff1a;构建一个简易…

【LeetCode】day15:110 - 平衡二叉树, 257 - 二叉树的所有路径, 404 - 左叶子之和, 222 - 完全二叉树的节点个数

LeetCode 代码随想录跟练 Day15 110.平衡二叉树257.二叉树的所有路径404.左叶子之和222.完全二叉树的节点个数 110.平衡二叉树 题目描述&#xff1a; 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 平衡二叉树的定义是&#xff0c;对于树中的每个节点&#xff0c;其左右…

qt自定义控件(QLabel)

先创建自定义控件类painter_label 1.自定义类必须给基类传入父窗口指针 2.重写控件中的方法 3.在UI中创建一个QLabel,右键“提升为”&#xff0c;输入类名

动画革命:Lottie如何改变我们对移动应用交互的认知

在数字世界的浩瀚星空中&#xff0c;每一个像素都跃动着无限创意与想象的火花。当静态的界面遇上动态的魔法&#xff0c;一场视觉盛宴便悄然开启。今天&#xff0c;让我们一同揭开一位幕后英雄的神秘面纱——Lottie&#xff0c;这个在UI/UX设计界掀起波澜的动画利器&#xff0c…

SVN与Git功能差异对比分析

最近在调研学习Git管理和分支模型相关内容&#xff0c;外延到了SVN和Git差异、工作原理等相关细节&#xff0c;学习整理如下。 SVN&#xff08;Subversion&#xff09;与 Git 的最大不同&#xff0c;主要包括以下几个方面&#xff1a; 交流探讨&#xff0c;加入群聊【Java学习…