【Python + Django】ORM 数据库操作

news2024/11/23 16:45:59

前言:

虽然我们知道了用MySQL数据库 + pymysql可以进行数据库的连接,

但这样的方式太繁琐了。

本文介绍一下Django为我们提供的更简单便捷的数据库连接方式:ORM框架。

ORM为我们翻译代码,使得我们的代码更加简洁易懂。

1 连接SQL

pip install pymysql
#pip install mysqlclient
#二选一

2 创建数据库

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

  • 创建修改删除数据库中的表(不用写SQL语句);【无法创建数据库】
  • 操作表中的数据;

step1:启动数据库

mysql -u root -p;

step2:使用自带工具创建数据库

show databases;

create database Django01 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

这样就算创建成功了啦!

3 连接数据库配置

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

把上面那个链接复制到浏览器打开可以寻找到配置文件,但是,太麻烦了

所以我选择直接百度:

文心一言YYDS。

原谅我废话有点多,我们现在可以把上面的database的文件换成百度给我们的内容吧。

啊,我真是太细致入微了。

把左边那个db.sqlite3删掉(删掉,删掉,通通删掉,再不删掉……)

再按照中文提示,对里面的内容进行注意修改:

4 使用类创建表

在model文件中,创建以下函数:

 上面的语句经过ORM的转化,便转化为下面的SQL语句:

create table app01_UserInfo(
    id bigint auto_increase primary key;
    name varchar(32),
    password varchar(64),
    age int
)

先检查一下我们的数据库当中是否有其他表:

use django01;
show tables;

 在命令行中进行以下命令:

python manage.py makemigrations

或者:

在pycharm的settings中找到:

 看看左下方可可爱爱的小加号,

在搜索框中搜索pymysql,点击左下方的 Install Package就可以了

左下角出现这个小行,就算成功啦:

mysqlclient同理:

终于,回归主题:

接下来执行如下语句:

python manage.py migrate

于是乎,我们成功创建了这个数据表(庆祝,撒花)。

下面的一大堆是返回的结果图:

 提示:完成这些的前提是要将app01注册到我们的settings.py文件当中哦

于是乎,我们的表中就可以看到这些东西啦:

至于,为什么会有这么多表呢?

因为Django提供了许多默认的函数,生成数据表的时候会连带生成这些功能函数的数据表。

5 创建和修改表结构

如果要删除表的列,只需要删除相应的python函数,再重新执行上面的两行命令就可以了。

如果要增加列,会出现以下提示:

因为我们的表中可能已经存有数据,所以增加列当中的数据就处于未定的状态。

若你选择1,则你将输入一个值,所有的行都赋这个值;

若你选择2,则不执行,需要你在函数体中添加一个默认值:

如:

score = models.IntegerField(default = 100)

不过我们作为程序员,有第三个选择:

score = models.IntegerField( null = ture , blank = true)

将函数的值改为允许为空值,则将所有的数据项的新属性均赋空值。

6 增删改查

6.1 增加数据

UserInfo.objects.create(name = "名字")

这句python语句,在sql语句当中相当于:

insert into app01_userinfo(name)values("名字")

6.2 删除数据

UserInfo.objects.filter(name = "名字").delete()

这句python语句,在sql语句当中相当于: 

delete * from user_info where name = "名字";

当然,你也可以删库跑路(误) :

UserInfo.objects.all().delete()

 6.3 获取数据

6.3.1 获取所有数据

UserInfo.objects.all()

得到的数据类型为数据表(list),QuerySet类型的数据;

6.3.2 逐一获取数据

data_list = UserInfo.objects.all()
for obj in data_list:
    print(obj.id,objz.name,obj.password,obj.age)

 同样,得到的数据类型为数据表(list),QuerySet类型的数据;

 6.3.3 获取特定数据

data_list = UserInfo.objects.filiter("查找条件")
for obj in data_list:
    print(obj.id,objz.name,obj.password,obj.age)

又同样,得到的数据类型为数据表(list),QuerySet类型的数据; 

若你只想取到第一个数据,则:

data_list = UserInfo.objects.filiter("查找条件").first()

6.4 更新数据

 更新所有数据:

UserInfo.objects.all().update(password=999)

更新某个特定数据:

UserInfo.objects.filter("查找条件").update(password=999)

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

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

相关文章

28-5 文件上传漏洞 - 图片马

一、文件内容检测 解析漏洞定义 控制文件是否被当做后端脚本处理 二、图片马绕过 图片马;在图片中包含一句话木马。利用解析漏洞如.htaccess 或文件包含漏洞,对图片马进行解析,执行其中的恶意代码。优势在于可以绕过多种防护机制。 三、图片马制作方法: # 一句话马示例…

Maven Deploy测试

文章目录 Maven环境deployreleaseRepo Manager演示 RefFAQ Maven 环境 jdk8maven v3.9.5 deploy mvn install将jar存到localRepository,mvn deploy把jar推送到远程仓库,然后可以像central库那样下载依赖。 release 基于git执行项目发版流程&#x…

【机器学习智能硬件开发全解】(六)—— 政安晨:通过ARM-Linux掌握基本技能【认知准备:体系结构与汇编指令】

ARM-Linux体系是指基于ARM架构的Linux操作系统体系,其它常见的体系还有x86-Linux体系等。ARM架构是一种常用于移动设备和嵌入式系统的处理器架构,如手机、平板电脑、智能手表等都广泛使用ARM处理器。 ARM-Linux体系基于Linux开源操作系统,并…

Python将字符串转换为datetime

有这样一些字符串: 1710903685 20240320110125 2024-03-20 11:01:25 要转换成Python的datetime 代码如下: import functools import re from datetime import datetime, timedelta from typing import Union# pip install python-dateutil from date…

51单片机学习笔记8 中断系统及定时器

51单片机学习笔记8 中断系统及定时器 一、中断的概念二、51单片机的中断1. 51单片机的中断源2. 中断的优先级3. 中断结构4. 外部中断解读5. 定时器中断6. 串口中断 三、中断相关寄存器1. IE 中断允许寄存器2. TCON 中断请求标志3. IP 中断优先级 四、中断号五、代码实现按键 &a…

如何实现跨标签页通讯

什么是跨标签页通讯 同一浏览器,可以打开多个标签页,跨标签页通讯就是,一个标签页能够发消息给另一标签页。 有哪些实现方案 localStorage (window.onstorage事件监听)BroadcastChannel(广播&#xff09…

Redis如何设置键的生存时间或过期时间

键的生存时间或过期时间 概述。 通过EXPIRE命令或者PEXIPIRE命令,客户端可以以秒或者毫秒精度为数据库中的某个键设置生存时间(Time To Live,TTL),在经过指定的秒数或者毫秒数之后,服务器就会自动删除生存时间为0的键: 127.0.0.1:6379>…

Python零基础---爬虫技术相关

python 爬虫技术,关于数据相关的拆解: 1.对页面结构的拆解 2.数据包的分析(是否加密了参数)(Md5 aes)难易程度,价格 3.对接客户(433,334) # 数据库 CSV 4.结单(发一部分数据&a…

酷开系统满足你的需求,加入酷开会员开启娱乐之旅

酷开科技深知家庭娱乐在我们生活中的重要性,因此,酷开科技不断努力为我们带来更好的内容和服务,在这里,我们能够享受到家庭娱乐的乐趣和便利,感受到酷开科技带来的温暖。电影迷、游戏迷还是音乐爱好者,酷开…

1236 - 二分查找

代码 #include<bits/stdc.h> using namespace std; int a[1100000]; int main() {int n,x,l,r,p,mid,i;cin>>n;for(i1;i<n;i)cin>>a[i];cin>>x;l1;rn;p-1;while(l<r){mid(rl)/2;if(a[mid]x){pmid;break;}else if(x<a[mid]) rmid-1;else if(x…

k8s为什么删除了pod但是还是没删除掉的问题,deployment在影响

deployment 影响pod删除 一、问题所在二、解决问题 一、问题所在 执行&#xff1a;kubectl get pods --all-namespaces&#xff0c;获取dashboard相关的pod kubectl get pods --all-namespaces | grep dashboardkubectl delete pod dashboard-metrics-scraper-546d6779cb-4x6…

备战秋招(coding篇)

其中coding题目来源于师兄面试经验 1、链表的结构体反转链表 本质上就是一个构造函数 struct ListNode{int val_;ListNode* next_;ListNode() : val_(0), next_(NULL) {}ListNode(int x) : val_(x), next_(NULL) {}ListNode(int x, ListNode* next) : val_(x), next_(next) …

【Spring Cloud】微服务通信概述

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情赞助播出 目录 前言 1. Dubbo&#xff08;Spring Cloud Alibaba&#xff09;和 Spring Cloud 的适…

使用ollama + webui 运行任意大模型

安装ollama https://hub.docker.com/r/ollama/ollama docker run -d -v ~/Documents/work/softs/docker/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama验证安装 # 进入容器docker exec -it ollama bash # 运行大模型 ollama run llama2 # 发送请求&…

【python + Django】Django模板语法 + 请求和响应

前言&#xff1a; 现在现在&#xff0c;我们要开始将变量的值展现在页面上面啦&#xff01; 要是只会显示静态页面&#xff0c;我们的页面也太难看和死板了&#xff0c; 并且数据库的数据也没法展现在页面上。 但是呢&#xff0c;模板语法学习之后就可以啦&#xff01;&…

笔记本8代i5和台式机12代i5的性能比较

一、 台式机12代i5 二、笔记本8代i5 在多核性能上差不多是2.4倍&#xff0c;所以跑大一点的Matlab或者别的程序&#xff0c;用台式机&#xff0c;后边实验室能用上超多核服务器另说。

【Flutter】文件选择器(file_picker)的用法

Flutter 没有提供内置的文件选择器&#xff0c;但社区内有人贡献了一个比较完整的解决方案——file_picker。 file_picker 的 API 简洁易用&#xff0c;支持全平台&#xff08;Android / iOS / Mac / Linux / Windows&#xff09;&#xff0c;是我开发桌面应用时的首选。 这边…

IDEA中快速配置Git

Git介绍&#xff1a; Git下载 idea中配置Git

蓝桥杯单片机快速开发笔记——串口通信

一、原理分析 二、思维导图 三、示例框架 #include <STC15F2K60S2.H> #include "HC573.h"void UartInit(void) //9600bps12.000MHz {SCON 0x50; //8位数据,可变波特率AUXR | 0x01; //串口1选择定时器2为波特率发生器AUXR & 0xFB; //定时器时钟12T模式…

流畅的 Python 第二版(GPT 重译)(六)

第三部分&#xff1a;类和协议 第十一章&#xff1a;一个 Python 风格的对象 使库或框架成为 Pythonic 是为了让 Python 程序员尽可能轻松和自然地学会如何执行任务。 Python 和 JavaScript 框架的创造者 Martijn Faassen。 由于 Python 数据模型&#xff0c;您定义的类型可以…