Django数据库创建存储及管理

一、什么是ORM

Django的ORM(Object-Relational Mapping)是Django框架中一个非常重要的组件。ORM可以让开发者以面向对象的方式操作数据库,而不需要直接编写SQL语句。

具体来说,Django ORM提供了以下功能:

模型定义:开发者可以在Django应用中定义Python类来表示数据库表,这些类称为模型(models)。

数据库操作:通过模型类,开发者可以使用Python代码对数据库进行CRUD(创建、读取、更新、删除)操作,而不需要编写SQL语句。

数据库迁移:Django ORM集成了数据库迁移工具,可以自动生成数据库表结构的变更脚本,简化了数据库维护工作。

查询优化:Django ORM会根据开发者编写的Python代码,自动生成高效的SQL语句,提高查询性能。

跨数据库支持:Django ORM支持多种关系型数据库,如MySQL、PostgreSQL、SQLite等,使得迁移数据库变得更加容易。

具体可以理解为:

1、创建一个Django的应用程序

在当前目录执行命令:

pdm run django-admin startapp myapp

这会在当前路径下生成一个myapp的目录

注意,需要在settings.py文件中的INSTALLED_APPS列表中添加刚刚创建的myapp应用程序

2、定义模型(Models),打开myapp/models.py文件,在这里定义您的数据模型。例如:

from django.db import models# Create your models here.class Feedback(models.Model):quality = models.IntegerField(verbose_name='商品质量', default=1)attitude = models.IntegerField(verbose_name='客服态度', default=1)speed = models.IntegerField(verbose_name='物流速度', default=1)text = models.TextField(verbose_name='评论内容', max_length=150, blank=True, null=True)is_anonymous = models.BooleanField(verbose_name='是否匿名', default=True)name = models.CharField(max_length=50, blank=True, null=True)def __str__(self):return f"Feedback by {self.name or 'Anonymous'}"

3、创建数据库表,也可以说是迁移数据库

在终端中运行以下命令,创建并应用数据库迁移:

migrations (迁移):将Model中的代码内容,应用到数据库中

makemigrations 基于模型的修改创建迁移。

showmigrations 列出项目的迁移和迁移的状态。

sqlmigrate 展示迁移使用的 SQL 语句。

migrate 负责应用和撤销迁移。 主要执行下面两个命令

pdm run python manage.py makemigrations
pdm run python manage.py migrate

pdm run python manage.py makemigrations

这个命令用于创建数据库迁移文件。 当你在models.py中修改了模型定义(比如添加/删除/修改字段)时,运行这个命令会让Django检测到模型的变更,并生成相应的迁移文件。 这些迁移文件包含了如何对数据库进行更改的指令(如添加新表、修改表结构等)。 生成的迁移文件通常位于app/migrations目录下。 pdm run python manage.py migrate

这个命令用于应用数据库迁移。 当你运行这个命令时,Django会检查数据库的当前状态,并应用所有尚未应用的迁移文件。 这意味着,如果你之前使用makemigrations生成了新的迁移文件,migrate命令会将数据库更新到最新状态。 migrate命令还可以回滚之前应用的迁移,从而撤销对数据库的修改。

注意,由于本项目是用的pdm管理,所以上面的命令可以简化成

pdm run init     

二、具体用法,在上面的内容中生成了一个叫做FeedBack的模型,也就是一个这样的表,接下来看看如何和views文件结合

1、让我来详细解释一下Django中views文件和models的作用以及它们之间的关系。

views.py文件

views.py文件是Django应用程序的核心部分之一。 在这个文件中,你可以定义Web应用程序的视图函数。 视图函数负责处理HTTP请求,执行必要的业务逻辑,并返回响应结果(通常是HTML页面或JSON数据)。 视图函数是连接URL和应用程序功能的桥梁。 使用models

在视图函数中,你通常需要与数据库进行交互,比如查询数据、创建新记录等。 为此,你需要使用在models.py文件中定义的Django模型(models)。 模型是一个Python类,它代表了数据库中的一个表结构。通过模型,你可以使用Django的ORM(对象关系映射)机制来执行各种数据库操作,而不需要直接编写SQL语句。 views和models的关系

视图函数调用模型,从而实现与数据库的交互。 例如,在视图函数中,你可以使用模型的objects.all()方法来获取数据库中的所有记录,然后将这些记录渲染到一个HTML模板中,最终返回给用户。 通过这种方式,视图函数负责业务逻辑的处理,而模型则负责与数据库的交互。这种分离有助于代码的可维护性和可扩展性。

2、编辑views.py文件

from django.shortcuts import render
from .models import FeedBackdef feedback_view(request):if request.method == 'POST':data = request.POST  # 获取前端提交的数据obj = FeedBack()obj.quality = data['quality']obj.attitude = data['attitude']obj.speed = data['speed']obj.text = data['text']obj.anonymous = data['anonymous']obj.save()  # 将数据保存到数据库# 可以执行其他的逻辑,比如返回成功页面等return render(request, 'feedback_success.html')# 如果是GET请求,则渲染反馈表单页面return render(request, 'feedback_form.html')

三、在admin中使用models

在models.py中定义好模型后,运行makemigrations和migrate命令可以创建相应的数据库表。

但是,这只是在数据库层面完成了模型与数据库的对应关系。

如果没有在admin.py中注册这些模型,Django管理后台就无法知道这些模型的存在。

只有在admin.py中注册了模型,Django管理后台才能够:在管理界面上显示这些模型 允许管理员对这些模型的数据进行增删改查操作 因此,如果只是在models.py中定义了模型,但是没有在admin.py中注册,那么将无法在Django管理后台中操作这些模型的数据。

换句话说,admin.py中的注册是一个关键的步骤,它将您在models.py中定义的模型与Django管理后台进行了关联,使得管理后台可以正确地对这些模型进行管理。

所以,您说的对,如果没有在admin.py中进行注册,您将无法在Django管理后台中对数据库进行增删改查操作。这是一个必要的步骤。

3、在Django中,要使用视图函数,还需要在urls.py文件中进行配置,将URL与视图函数进行映射。

上面views.py文件中有一个名为feedback_view的视图函数,那么需要在urls.py文件中进行如下配置

from django.urls import path
from . import viewsurlpatterns = [path('feedback/', views.feedback_view, name='feedback'),
]

Django的ORM允许开发者以面向对象的方式操作数据库,无需直接编写SQL语句。它提供了模型定义、数据库操作、数据库迁移、查询优化和跨数据库支持等功能。在Django应用中,开发者可以定义Python类来表示数据库表,这些类称为模型。通过模型类,开发者可以使用Python代码对数据库进行CRUD操作。Django ORM还集成了数据库迁移工具,可以自动生成数据库表结构的变更脚本,简化了数据库维护工作。在Django管理后台中,只有在admin.py中注册了模型,才能在管理界面上显示这些模型并允许管理员对这些模型的数据进行增删改查操作。

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

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

相关文章

EasyExcel 处理 Excel

序言 本文介绍在日常的开发中,如何使用 EasyExcel 高效处理 Excel。 一、EasyExcel 是什么 EasyExcel 是阿里巴巴开源的一个 Java Excel 操作类库,它基于 Apache POI 封装了简单易用的 API,使得我们能够方便地读取、写入 Excel 文件。Easy…

GitHub Copilot 简单使用

因为公司安全原因,并不允许在工作中使用GitHub Copilot,所以,一直没怎么使用。最近因为有一些其它任务,所以,试用了一下,感觉还是很不错的。(主要是C和Python编程) 一:常…

夸克网盘批量转存分享查询软件

夸克网盘批量转存分享软件,未解决批量转存困难问题以及批量分享困难问题,故研发此软件,无任何广告。 支持功能 夸克文件目录查询 自定义分页页码,分页数量 批量转存夸克文件 批量分享夸克文件 自定义导入夸克链接 使用教程…

ubuntu外置网卡配置AP模式

外置网卡RTL8811CU设置 UBUNTU使用RTL8811CU网卡(包含树莓派) 外置网卡配置AP模式流程 1. 检查网卡支持情况(是否支持AP模式) iw list找到以上部分,发现支持AP 2. 安装依赖 sudo apt-get update sudo apt-get in…

SpringBoot的ProblemDetails

1.RFC 7807 之前的项目如果出现异常,默认跳转到error页面。或者是抛出500 异常。 但是对于前后端分离的项目,Java程序员不负责页面跳转,只需要 把错误信息交给前端程序员处理即可。而RFC 7807规范就是将异常 信息转为JSON格式的数据。这个…

Docker——生产案例(如何修改Docker部署服务的端口映射)

目录 前言 1. 测试环境中新建Apache服务 2.停止容器和Docker服务 3.修改容器配置 4.重启Docker服务并访问测试 前言 由于接替原工作人员的工作之后,上级需要修改Docker部署Apache服务的端口映射,将89端口修改为99端口,那我们该如何修改呢…

Linux shell编程学习笔记48:touch命令

0 前言 touch是csdn技能树Linux基础练习题中最常见的一条命令,这次我们就来研究它的功能和用法。 1. touch命令的功能、格式和选项说明 我们可以使用命令 touch --help 来查看touch命令的帮助信息。 purpleEndurer bash ~ $ touch --help Usage: touch [OPTION]…

B树:原理、操作及应用

B树:原理、操作及应用 一、引言二、B树概述1. 定义与性质2. B树与磁盘I/O 三、B树的基本操作1. 搜索(B-TREE-SEARCH)2. 插入(B-TREE-INSERT)3. 删除(B-TREE-DELETE) 四、B树的C代码实现示例五、…

selenium 4.x 之验证码处理(python)

验证码处理 一般情况公司如果涉及web自动化测试需要对验证码进行处理的方式一般有一下几种: 关闭验证码功能(开发处理)设置万能验证码(开发处理)使用智能识别库进行验证 通过第三方打码平台识别验证码 1. 跳过验证功…

与Apollo共创生态:探索自动驾驶的未来蓝图

目录 引言Apollo开放平台Apollo开放平台企业生态计划Apollo X 企业自动驾驶解决方案:加速企业场景应用落地Apollo开放平台携手伙伴共创生态生态共创会员权益 个人心得与展望技术的多元化应用数据驱动的智能化安全与可靠性的重视 结语 引言 就在2024年4月19日&#x…

node应用部署运行案例

生产环境: 系统:linux centos 7.9 node版本:v16.14.0 npm版本:8.3.1 node应用程序结构 [rootRainYun-Q7c3pCXM wiki]# dir assets config.yml data LICENSE node_modules nohup.out output.log package.json server wiki.log [rootRainYun-Q7c…

【跟马少平老师学AI】-【神经网络是怎么实现的】(七-1)词向量

一句话归纳: 1)神经网络不仅可以处理图像,还可以处理文本。 2)神经网络处理文本,先要解决文本的表示(图像的表示用像素RGB)。 3)独热编码词向量: 词表:{我&am…

IOS上线操作

1、拥有苹果开发者账号 2、配置证书,进入苹果开发者官网(https://developer.apple.com/) 3、点击账户(account),然后创建一个唯一的标识符 4、点击"Identifiers",然后点击"&qu…

面试:Mybatis(MyBatis执行流程、延迟加载、MyBatis的缓存)

目录 一、MyBatis执行流程 二、MyBatis是否支持延迟加载? 1、什么是延迟加载? 2、延迟加载的原理 三、MyBatis的缓存 1、一级缓存 2、二级缓存 3、注意事项 一、MyBatis执行流程 读取MyBatis配置文件: mybatis-config.xml加载运行环境和映射文件构…

本地基于知识库的大模型的使用教程

本地基于知识库的大模型的使用教程 启动 双击 大模型启动.bat文件,内容如下: cmd /k "cd /d G:\Anaconda3\Scripts && activate.bat && cd /d D:\docdb_llm && conda activate python3.11 && python startup.py…

2-手工sql注入(进阶篇) sqlilabs靶场1-4题

1. 阅读,学习本章前,可以先去看看基础篇:1-手工sql注入(基础篇)-CSDN博客 2. 本章通过对sqlilabs靶场的实战,关于sqlilabs靶场的搭建:Linux搭建靶场-CSDN博客 3. 本章会使用到sqlmap,关于sqlmap的命令&…

密码学基础练习五道 RSA、elgamal、elgamal数字签名、DSA数字签名、有限域(GF)上的四则运算

1.RSA #include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <time.h>#define PRIME_MAX 200 //生成素数范围#define EXPONENT_MAX 200 //生成指数e范围#define Element_Max 127 //加密单元的…

【Vue】结合ElementUI实现简单数据请求和页面跳转功能

一、准备工作 1、创建一个Vue-cli程序 之前的博客有。各位看官姥爷&#xff0c;可以自查。 2、安装ElementUI 在创建Vue-cli程序的过程中&#xff0c;需要在控制台执行以下指令&#xff1a; #安装 element-ui npm i element-ui -S #安装 SASS 加载器 cnpm install sass-loa…

nginx--自定义日志跳转长连接文件缓存状态页

自定义日志服务 [rootlocalhost ~]# cat /apps/nginx/conf/conf.d/pc.conf server {listen 80;server_name www.fxq.com;error_log /data/nginx/logs/fxq-error.log info;access_log /data/nginx/logs/fxq-access.log main;location / {root /data/nginx/html/pc;index index…

基于React实现B站评论区

今天继续来学习一下React&#xff0c;使用React实现B站评论区&#xff0c;如下图&#xff1a; 在使用React开发类似B站评论区的功能时&#xff0c;我们需要考虑以下几个关键点来构建一个基本的评论系统&#xff1a; 1. 设计组件结构 首先&#xff0c;设计组件结构是关键。至少…