Python从0到100(四十三):数据库与Django ORM 精讲

在这里插入图片描述

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!
欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!

一、后端开发离不开数据库

在Web开发的浩瀚世界中,后端开发是构建系统架构的核心。而数据库,无疑是后端开发中不可或缺的一部分。它像是一个巨大的仓库,存储着系统运行所需的所有数据,比如用户的个人信息、订单详情、文章内容等等。今天,我们就来聊聊后端开发中的数据库操作,以及如何使用Python和Django框架来简化这一过程。
真实的系统 就应该返回真实的 订单信息。 那么服务端从哪里获取真实的订单信息呢? 像 订单信息 这些数据通常就是保存在数据库里面的。后端开发基本都需要操作数据,包括数据的 **存储、查询、修改、删除。**通常,这些都是通过数据库来完成的。目前业界最广泛使用的数据库还是:关系型数据库。
关系型数据库系统,常用的开源数据库有 mysqlpostgresql。建议大家实际工作中使用的时候,使用上面这两种。
但是上面这些数据库,都需要我们安装数据库服务系统 和 客户端库,比较麻烦,现在我们先使用另一种更简单的 数据库 sqlite。sqlite 没有 独立的数据库服务进程,数据操作被做成库直接供应用程序调用。 Django中可以直接使用,无须先搭建数据服务。
后面我们要使用mysql 等其他数据库 只需修改一些配置就可以了。
我们可以看到setting文件中,我们就是使用的splite数据库:
在这里插入图片描述

1.创建数据库

项目中数据库的配置在 bysms/settings.py 中,这里:

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databasesDATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}

大家可以发现,我们使用命令创建的项目, 缺省就是使用 sqlite。 而且对于的数据库文件,缺省的文件名是 db.sqlite3 , 就在项目的根目录下面:
在这里插入图片描述
虽然,我们已经存在这个文件啦,但是其中并没有写入一些表格之类的数据,所以说我们还需要执行命令,创建其中的数据。
首先我们需要创建数据库,执行如下命令:

python manage.py migrate

就会在 项目的根目录下面 生成一个配置文件中指定的数据库文件 db.sqlite3。并且 会在其中创建一些表。
在这里插入图片描述

2.下载数据库工具sqlite studio

虽然MySQL和PostgreSQL功能强大,但在开发初期,SQLite因其轻量级和无需单独部署数据库服务的特点,成为了快速开发和原型设计的理想选择。Django框架内置了对SQLite的支持,使得开发更加便捷。
要知道里面是什么样子的文件,我们需要下载sqlite 数据库工具:sqlitestudio(点击蓝色字体进入链接)
在这里插入图片描述
下载后解压即可, 运行该工具, 然后打开上面的 文件 db.sqlite3
将我们的数据库文件添加到sqlitestudio中,打开。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这些表都是 Django缺省设置中, 需要的一些 基本表。
包括: 用户表 auth_user, 登录会话表 django_session 等等。
在这里插入图片描述

3.Django中的数据库配置

在Django中,数据库的配置非常简洁。通过settings.py文件中的DATABASES设置,我们可以轻松地切换不同的数据库后端。以SQLite为例,配置如下:

DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}

这段代码指定了Django使用SQLite作为数据库后端,并定义了数据库文件的位置。

二、什么是 ORM

Django 里面, 数据库表的操作,包括 表的定义、表中数据的增删改查,都可以通过 Model 类型的对象进行的。
通常,在Django中:

  1. 定义一张数据库的表 就是定义一个继承自 django.db.models.Model 的类

  2. 定义该表中的字段(列), 就是定义该类里面的一些属性

  3. 类的方法就是对该表中数据的处理方法,包括 数据的增删改查

1. ORM的优势

使用ORM,我们无需编写SQL语句,而是通过Python代码来定义数据模型和执行数据库操作。这不仅提高了开发效率,还增强了代码的可读性和可维护性。

2. 定义数据模型

在Django中,定义数据模型非常简单。我们只需要在models.py文件中创建继承自Model的类,并定义相应的字段即可。例如:

from django.db import modelsclass Customer(models.Model):name = models.CharField(max_length=200)phonenumber = models.CharField(max_length=200)address = models.CharField(max_length=200)

三、定义我们的数据库表

我们开发系统,需要定义我们需要的数据库表。

1.创建common应用目录

首先,我们再创建一个名为common的应用目录, 里面存放我们项目需要的一些公共的表的定义。
进入项目根目录,执行下面的命令。

python manage.py startapp common 

在这里插入图片描述
在这里插入图片描述
就会创建一个目录名为 common, 对应 一个名为 common 的app,里面包含了如下自动生成的文件。

common/__init__.pyadmin.pyapps.pymigrations/__init__.pymodels.pytests.pyviews.py

Django是通过定义类来定义数据库表的。所以,我们要定义数据库的表,无需执行sql语句,只需要在app目录下面 定义特殊的类就可以了。数据库表的定义,一般是放在app目录中的 models.py里面的。

2.修改业务表

打开 common/models.py,发现里面是空的,因为我们还没有定义我们的业务所需要的表。
我们修改它,加入如下内容:

from django.db import models
class Customer(models.Model):# 客户名称name = models.CharField(max_length=200)# 联系电话phonenumber = models.CharField(max_length=200)# 地址address = models.CharField(max_length=200)

在这里插入图片描述

这个 Customer 类继承自 django.db.models.Model, 就是用来定义数据库表的。
里面的 name、phonenumber、address 是该表的3个字段。
定义表中的字段 就是定义一些静态属性,这些属性是 django.db.models 里面的各种 Field 对象,对应不同类型的字段。
比如这里的3个字段 都是 CharField 对象,对应 varchar类型的数据库字段。
后面的参数 max_length 指明了该 varchar字段的 最大长度。
Djanog 有很多字段对象类型, 对应不同的类型的数据库字段。

四、创建数据库表

定义好表以后,我们怎么真正去创建数据库表呢?

1.配置内容

首先我们需要告诉Django: 我们的 common 应用中 需要你关注, 因为其中包含了 数据库Model的定义。
在项目的配置文件 settings.py 中, INSTALLED_APPS 配置项 加入如下内容:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 加入下面这行'common.apps.CommonConfig',
]

‘common.apps.CommonConfig’ 告诉 Django , CommonConfig 是 common/apps.py 文件中定义的一个应用配置的类。
是这样的

class CommonConfig(AppConfig):name = 'common'

在这里插入图片描述
CommonConfig 是 AppConfig的 子类, 就表示这个是应用的配置类。
这里 name = ‘common’ , name 是用来定义 应用的python模块路径的。 这里就是说 应用 模块路径为 common 。

2.执行创建命令

Django知道了我们的 common 应用, 我们可以在项目根目录下执行命令:

python manage.py makemigrations common

得到如下结果:
在这里插入图片描述
这个命令,告诉Django , 去看看common这个app里面的models.py ,我们已经修改了数据定义, 你现在去产生相应的更新脚本。
执行一下,会发现在 common\migrations 目录下面出现了0001_initial.py, 这个脚本就是相应要进行的数据库操作代码。
在这里插入图片描述

3.重新定义数据库

随即,执行如下命令,也就是我们之前定义数据库的命令:

python manage.py migrate

在这里插入图片描述
就真正去数据库创建表了。
用 sqlitestudio 查看数据库,发现创建了一张名为 common_customer的表,如下:
在这里插入图片描述

其中 3 个字段就是我们上面定义的 Customer 类里面的 name、phonenumber、address 属性名。多出来的 id 字段是该表的主键, 是Django自动帮我们添加的。

4.添加空表

在model里面再加入qq,使其为空表:
在这里插入图片描述
重新执行创建命令:

python manage.py makemigrations common

在这里插入图片描述
在这里插入图片描述
最后在执行migrate
在这里插入图片描述
得到我么的qq新表:
在这里插入图片描述

五、Django管理员设置

1.创建管理员账号

Django提供了一个管理员操作界面可以方便的 添加、修改、删除你定义的 model 表数据。
首先,我们需要创建 一个超级管理员账号。进入到项目的根目录,执行如下命令,依次输入你要创建的管理员的 登录名、email、密码。

d:\projects\bysms>python manage.py createsuperuser
Username (leave blank to use 'byhy'): byhy
Email address: byhy@163.com
Password:
Password (again):
Superuser created successfully.

在这里插入图片描述
创建后进入我们的数据库工具,打开user,会发现我们刚才输入的账号和密码,在这里密码是进行加密的:
在这里插入图片描述
然后我们需要修改应用里面的 管理员 配置文件 common/admin.py,注册我们定义的model类。这样Django才会知道。

from django.contrib import adminfrom .models import Customeradmin.site.register(Customer)

然后需要重新启动一下服务器,这个地方大家如果不太懂的话可以看本专栏的第二节课 :Python Web开发二:Django的安装和运行
在这里插入图片描述

2.访问登录网站

好了,现在就可以访问 http://127.0.0.1:8080/admin/ ,输入刚才注册的用户密码登录。
在这里插入图片描述

登录后可以看到如下界面。这里面是目前系统中可以修改的表。
在这里插入图片描述

3.添加用户

然后我们可以点击添加user,去添加新的用户:
在这里插入图片描述

此时打开数据库,我们就会发现,又给我们增添了一条用户信息:
在这里插入图片描述

4.添加功能

我们看到我们的界面中,现在只有两个功能,没有customer,
在这里插入图片描述
如果想要添加的话,需要将代码加入到models文件中:

from django.contrib import admin
admin.site.register(Customer)

在这里插入图片描述
此时,如果服务器终止了,我们需要重启服务器,然后刷新界面,就会得到我们下面的新的功能:在这里插入图片描述

5.添加客户

同时我们也可以添加客户:
在这里插入图片描述

此时在我们的数据库中,我们就可以看到我们新添加的客户信息:
在这里插入图片描述

可以说是非常的方便,如果你也是一步一步做下来的话,真的会非常有成就感嗷~
通过上述步骤,我们不仅了解了后端开发中数据库的重要性和使用方法,还学习了如何通过Django框架简化数据库操作,并通过ORM技术提高开发效率。希望这篇文章能帮助你在Python Web开发的道路上更进一步。

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

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

相关文章

Arduino学习笔记1——IDE安装与起步

一、IDE安装 去浏览器直接搜索Arduino官网,点击Software栏进入下载界面,选择Windows操作系统: 新版IDE下载不需要提前勾选所下载的拓展包,下载好后直接点击安装即可。 安装好后打开Arduino IDE,会自动开始下载所需的…

World of Warcraft [CLASSIC] Timebadge

游戏币【每个服务器实时金价不一样,本例子是5000-6000金】 1枚【魔兽世界时光徽章】 30天游戏时间。 5760金币游戏币,策划如何消耗游戏里面的金币总量,以及如何留住那些非人民币玩家呢 30天加上去了 World of Warcraft [CLASSIC] [魔兽世界…

怎么使用动态IP地址上网

如何设置动态IP地址上网? 设置动态IP地址上网的步骤如下: 一、了解动态IP地址 动态IP地址是由网络服务提供商(ISP)动态分配给用户的IP地址,它会根据用户的需求和网络情况实时改变。相比于静态IP地址,动态…

使用VuePress-Reco快速搭建博客(保姆级)

简介:VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题,可以自由搭建自己的风格,比较方便简洁。 链接:vuepress-reco 准备环境: Node.Js >20.5.0,Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

七、SpringBoot日志

1. 得到日志对象 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; //打印日志…

【Django】django模板与前端技术(html模板)

文章目录 “python包html”还是“html包python”?1.新建模板2.模板语法3.views.py测试 “python包html”还是“html包python”? 在前端页面中html代码比python多得多,所以一定是html包python最优!于是引出今天的模板。 大体分为三个步骤:…

独立站外链如何影响搜索引擎排名?

独立站的外链对搜索引擎排名有着非常重要的影响。简单来说,外链就像是别的网站对你的网站投的信任票。每一条外链都告诉搜索引擎:“这个网站的内容是有价值的,值得推荐。”因此,外链的数量和质量直接影响你的网站在搜索引擎中的排…

Lc60---1189. “气球” 的最大数量(排序)---Java版

1.题目 2.思路 (1)用字典的方法,ballon,这个单词里面每个字母,需要的个数 (2)再创一个字典的方法统计,输入的字符串的字母的个数 (3)计算能拼凑出多少个“ballon" (4)代码解释 for (char c : text.toCharArray()) {count.put(c, count.getOrDefau…

vue3编程-import.meta.glob实现动态路由(菜单)

import.meta.glob 是vite提供的批量懒加载组件的方法 本地开发环境: const modules import.meta.glob(../views/**/*.vue)这段代码返回的modules是一个Map: key是vue文件的相对路径,值是一个函数,将函数打印出来,如…

Python鲁汶意外莱顿复杂图拓扑分解算法

🎯要点 🎯算法池化和最佳分区搜索:🖊网格搜索 | 🖊发现算法池 | 🖊返回指定图的最佳划分 | 🖊返回指定图的最佳分区 | 🎯适应度和聚类比较功能:🖊图的划分 |…

Python3网络爬虫开发实战(1)爬虫基础

一、URL 基础 URL也就是网络资源地址,其满足如下格式规范 scheme://[username:password]hostname[:port][/path][;parameters][?query][#fragment] scheme:协议,常用的协议有 Http,https,ftp等等;usern…

构建高效园区导览系统:基于3DGIS与物联网技术的实现方案

园区导航的挑战与机遇 在现代化的大型园区中,随着面积的不断扩张和布局的日益复杂,传统的纸质地图已难以满足日益增长的导航需求。每栋楼、每层楼都有着不同的办公室,不同的业务。这种低效的寻路过程不仅影响了客户的来访体验,也…

Flink时间和窗口

目录 时间语义 水位线(Watermarks) 并行流中的水位线 窗口 滚动窗口—Tumbling Windows 滑动窗口—Sliding Windows 会话窗口—Session Windows 全局窗口—Global Windows 例子 时间语义 如图所示,由事件生成器(Event Pr…

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter

1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid,使用中发现唯一建冲突,生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…

饥荒dst联机服务器搭建基于Ubuntu

目录 一、服务器配置选择 二、项目 1、下载到服务器 2、解压 3、环境 4、启动面板 一、服务器配置选择 首先服务器配置需要2核心4G,4G内存森林加洞穴大概就占75% 之后进行服务器端口的开放: tcp:8082 tcp:8080 UDP:10888 UDP:10998 UDP:10999 共…

前端:Vue学习 - 购物车项目

前端:Vue学习 - 购物车项目 1. json-server,生成后端接口2. 购物车项目 - 实现效果3. 参考代码 - Vuex 1. json-server,生成后端接口 全局安装json-server,json-server官网为:json-server npm install json-server -…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

CasaOS设备使用Docker安装SyncThing文件同步神器并实现远程管理

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

加密软件有什么用?五款电脑文件加密软件推荐

加密软件对于个人和企业来说至关重要,尤其是在2024年这样一个高度数字化的时代,数据安全变得尤为重要。 数据保护:加密软件可以保护敏感信息不被未经授权的人访问。这包括个人数据、财务记录、健康信息、企业机密等。 防泄漏:防…