Django数据库创建存储及管理

news2024/11/25 22:45:01

一、什么是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 FeedBack

def 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 views

urlpatterns = [
    path('feedback/', views.feedback_view, name='feedback'),
]

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

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

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

相关文章

模方试用版水面修整,调整水岸线功能进程缓慢该怎么解决?

答:水面修整,第一个点选取准确的高程位置和水边,其他点就可以包含整个水面范围就行,可以绘制大一些。上图绘制区域没有包含到所有的水面,可以尝试下图的红线绘制区域。 模方是一款针对实景三维模型的冗余碎片、水面残缺…

van-cascader(vant2)异步加载的bug

问题描述:由于一次性返回所有的级联数据的话,数据量太大,接口响应时间太久,因此采用了异步加载的方案,看了vant的官方示例代码,照着改了下,很轻松地实现了功能。正当我感叹世界如此美好的时候&a…

【LeetCode刷题】34. 在排序数组中查找元素的第一个和最后一个位置

1. 题目链接 34. 在排序数组中查找元素的第一个和最后一个位置 2. 题目描述 3. 解题方法 找到元素的第一个位置,也就是找大于等于目标的最小值找到元素的最后一个位置,也就是找小于等于目标的最大值可以利用2次二分查找来解决 3.1. 第一次查找 3.2. …

数据分析--客户价值分析RFM(分箱法/标准化)

原数据 原数据如果有异常或者缺失等情况,要先对数据进行处理 ,再进行下面的操作,要不然会影响结果的正确性 一、根据RFM计算客户价值并对客户进行细分 1. 数据预处理 1.1 创建视图存储 R、F、M的最大最小值 创建视图存储R 、F、M 的最大最小…

CHiME-8多通道远场语音识别Baseline介绍

语音领域每年都有很多比赛,每个比赛都有自己的侧重点,其中CHiME系列比赛的侧重点就是多通道远场语音识别,与其他的语音识别比赛有所区别的是,CHiME提供分布式麦克风和麦克风阵列数据,这样可以选择合适的前端算法以降低…

【C++ | 语句】条件语句(if、switch)、循环语句(while、do while、for、范围for)、跳转语句、try语句块和异常处理

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-05-02 2…

【工具类安装教程】IDEA Ui设计器JFormDesigner

1、下载插件 File->Settings->Plugins->JFormDesigner 2、注册教程 2.1注册机下载 链接:https://pan.baidu.com/s/1Rb1EMva5HIYbyBcYgCxIsw 提取码:6666 2.2找到目录 1、找到idea目录 2.3进入plugins目录 找到在JFormDesigner文件夹下lib文…

Flutter笔记:使用Flutter私有类涉及的授权协议问题

Flutter笔记 使用Flutter私有类涉及的授权协议问题 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.cs…

【51单片机LCD1602显示矩阵键盘原始键值】2023-6-1

缘由https://ask.csdn.net/questions/7955623 #include "reg52.h" sbit LCD1602_RS P3^5;//RS端数据命令选择(H/L) sbit LCD1602_RW P3^6;//RW端读写选择(H/L) sbit LCD1602_EN P3^7;//EN端使能信号上升沿25ns void PanDuan1602(/*LCD1602忙判断*/) { LCD1602…

Word文件导出为PDF

Word文件导出为PDF 方法一、使用Word自带另存为PDF功能 打开需要转换为PDF格式的Word文件,依次点击【文件】➡【另存为】➡选择文件保存类型为.PDF 使用这种方法导出的PDF可能存在Word中书签丢失的情况,在导出界面点击,选项进入详细设置 勾…

钉钉手机端调试前端H5项目流程

此流程以Vue项目为例 一、操作步骤 在根目录下 vue.config.js 文件中将 devServer.host 设置为 0.0.0.0 // vue.config.js module.exports {devServer: {host: 0.0.0.0,...},...}本地启动项目,获取 Network App running at:- Local: http://localhost:8080/ -…

C语言--贪吃蛇小游戏

目录 一、Win32API介绍 1.1Win32API 1.2控制台程序 1.3控制台屏幕上的坐标COORD 1.4GetStdHandle 1.5GetConsoleCursorInfo 1.6 CONSOLE_CURSOR_INFO 1.7 SetConsoleCursorInfo 1.8SetConsoleCursorPosition 1.9GetAsyncKeyState 二、贪吃蛇游戏设计与分析 2.1地图 …

设计模式之MVC模式

在编程江湖闯荡多年,我手中打磨过的设计模式多如繁星,但论及经典与实用, MVC(Model-View-Controller)模式 绝对是个中翘楚!它不仅是Web应用的骨架,更是软件架构的智慧结晶。今天,咱们…

『跨端框架』Flutter环境搭建

『跨端框架』Flutter环境搭建 资源网站简介跨平台高性能发展历程跨平台框架的比较成功案例 环境搭建(windows)基础环境搭建Windows下的安卓环境搭建Mac下的安卓环境配置资源镜像JDKAndroid StudioFlutter SDK问题一问题二问题三修改项目中的Flutter版本 …

解码Starknet Verifier:深入逆向工程之旅

1. 引言 Sandstorm为: 能提交独立proof给StarkWare的Ethereum Verifier,的首个开源的STARK prover。 开源代码见: https://github.com/andrewmilson/sandstorm(Rust) L2Beat 提供了以太坊上Starknet的合约架构图&…

全新TOF感知RGBD相机 | 高帧率+AI,探索3D感知新境界

海康机器人在近期的机器视觉新品发布会上推出的全新TOF感知RGBD相机,无疑是对当前机器视觉技术的一次革新。这款相机不仅融合了高帧率、轻松集成、体积小巧以及供电稳定等诸多优点,更重要的是,它将AI与3D感知技术完美结合,通过高帧率+AI算法,实现了对不同场景的快速捕捉与…

莫比乌斯变换的数学原理

一、说明 关于莫比乌斯变换,是一个代数几何变换的重要概念。也是双曲几何的重要理论,比如庞加莱盘就是建立在这个理论上,那么这个变换到底有哪些内容?本文将做出详细的解读。 二、线性变换和逆变换 在本节中,我们研…

SQL 基础 | AS 的用法介绍

SQL(Structured Query Language)是一种用于管理和操作数据库的标准编程语言。 在SQL中,AS关键字有几种不同的用法,主要用于重命名表、列或者查询结果。 以下是AS的一些常见用法: 重命名列:在SELECT语句中&a…

AI图书推荐:用ChatGPT快速创建在线课程

您是否是您领域的专家,拥有丰富的知识和技能可以分享?您是否曾想过创建一个在线课程,但被这个过程吓倒了?那么,是时候把这些担忧放在一边,迈出这一步了!有了这本指南和ChatGPT的帮助&#xff0c…

python学习笔记B-16:序列结构之字典--字典的遍历与访问

下面是字典的访问和遍历方法: d {10:"hello",20:"python",30:"world"} print(d[10],"--",d[20],"--",d[30]) print(d.get(10)) print("以上两种访问方式的区别是,d[key]若键是空值&#xff0c…