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://www.mzph.cn/diannao/6032.shtml

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

相关文章

tensorflow报错

参考 TensorFlow binary is optimized to use available CPU instructions in performance-critical operations._this tensorflow binary is optimized to use availab-CSDN博客 解决Python中cuBLAS插件无法注册问题_unable to register cudnn factory: attempting to re-CS…

45. UE5 RPG 使用元属性(Meta Attributes)以及使用Set by Caller修改伤害

在RPG游戏中,我们是不会直接修改生命值的属性,是因为在修改角色属性时,需要获取角色的属性并进行复杂的计算,所以,我们正常情况下使用元属性(Meta Attributes)作为计算的中间的媒。在服务器上先…

【讲解下如何解决一些常见的 Composer 错误】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

Ex1-C6油气化工防爆轮式巡检机器人

Ex1系列防爆轮式巡检机器人整机采用防爆设计,防爆等级为Exd II CT4 Gb。机器人通过无轨3D形态导航技术,结合360度防爆云台和无线防爆充电桩,实现整套防爆标准,可广泛应用于石油、燃气、化工、冶金等II类爆炸环境中,代替…

大模型公开可用的模型检查点或 API

文章目录 公开可用的模型检查点或 APILLaMA 变体系列大语言模型的公共 API 公开可用的模型检查点或 API 众所周知,大模型预训练是一项对计算资源要求极高的任务。因此,经过预训练的公开模型检查点(Model Checkpoint)对于推动大语言…

IDEA 申请学生许可证

如果你有学生账号,并且账号是 EDU 结尾的,可以申请 IDEA 的学生许可证。 有效期一年,完全免费。 在界面上输入邮件地址,然后单击按钮提交。 邮件中单击链接 JetBrains 会把一个带有链接的邮件发送到你的邮箱中。 单击邮箱中的…

分类规则挖掘(三)

目录 四、贝叶斯分类方法(一)贝叶斯定理(二)朴素贝叶斯分类器(三)朴素贝叶斯分类方法的改进 五、其它分类方法 四、贝叶斯分类方法 贝叶斯 (Bayes) 分类方法是以贝叶斯定理为基础的一系列分类算法的总称。贝…

【C++STL详解(五)】--------list的介绍与使用

目录 前言 一、list的介绍 二、list的使用 Ⅰ.默认成员函数 1、构造函数 2、赋值重载 3、析构函数 Ⅱ、容量 1.size() Ⅲ、迭代器与遍历 1.beginend (正向迭代器) 2.rbeginrend (反向迭代器) 3.front 4.back Ⅳ、增删查改 1.push_front 2.pop_front 3.push_b…

c3 笔记7 css基本语法

相关内容:字体、段落、词间距、文字效果(对齐、上下标、阴影)、背景图、背景渐变、…… 单位pt与px的差别pt是印刷使用的字号单位,不管屏幕分辨率是多少,打印到纸上看起来都是相同的,lot的长度是0.01384英寸…

【STM32+HAL】SDIO+DMA模式读写SD卡

一、准备工作 有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32HAL】CUBEMX初始化配置 二、所用工具 1、芯片: STM32F407ZGT6 2、IDE: MDK-Keil软件 3、库文件:STM32F4xxHAL库 三、实现功能 实现用SDIODMA读写S…

05_机器学习赛事_优惠券使用预测

1. 函数库导入 # import libraries necessary for this project import os, sys, pickleimport numpy as np import pandas as pdimport matplotlib.pyplot as plt import matplotlib.dates as mdatesimport seaborn as sns import datetime as dtfrom datetime import datefr…

如何删除BigKey

③第三方工具 利用第三方工具,如 Redis-Rdb-Tools 分析RDB快照文件,全面分析内存使用情况https://github.com/sripathikrishnan/redis-rdb-tools ④网络监控 自定义工具,监控进出Redis的网络数据,超出预警值时主动告警一般阿里…

拼多多新店和老店哪个好做

拼多多新店和老店哪个好做 拼多多推广可以使用3an推客。3an推客(CPS模式)给商家提供的营销工具,由商家自主设置佣金比例,激励推广者去帮助商家推广商品链接,按最终有效交易金额支付佣金,不成交不扣费。是商…

34.Docker基本操作

镜像相关的命令 镜像名称分为两部分组成:[repository]:[tag],tag就是镜像的版本。如果tag没有指定默认就是latest,表示最新版本的镜像。 查看docker命令的帮助信息 docker --help 具体某条命令的帮助信息 docker images --help 案例一:从DockerHub中…

5G赋能 扬帆未来|AGV无人仓成黑科技“顶流”

AGV 近年来,无人化这个概念逐渐被运用到了社会中的各个行业,而跟物流有关的就有无人分拣机器人、无人驾驶卡车、和无人叉车,越来越多的新装备也开始投入到实际运用中。 仓储管理在物流管理中占据着核心地位。传统的仓储管理中存在诸多的弊端…

发卡盗u源码系统搭建ZHU

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板,最好是部署智能合约后用合约地址来授权包含转账支付页面盗U授权源码。 完美提U,教程包含如何提u 。功能完美。 1.Php静态 2.目录puicta 3.扩sal 4.ssl不强https

SQL数据库

一.什么是数据库 数据库:存储数据的仓库,数据是有组织的进行存储。(database 简称DB) 数据库管理系统:管理数据库的大型软禁(DataBase Management System 简称DBMS) SQL:操作关系…

Golang | Leetcode Golang题解之第63题不同路径II

题目&#xff1a; 题解&#xff1a; func uniquePathsWithObstacles(obstacleGrid [][]int) int {n, m : len(obstacleGrid), len(obstacleGrid[0])f : make([]int, m)if obstacleGrid[0][0] 0 {f[0] 1}for i : 0; i < n; i {for j : 0; j < m; j {if obstacleGrid[i]…

《读懂财务报表》手绘版读书笔记:通过报表找好公司

通过财报的三张表判断好公司&#xff1a; 然后是在三表中&#xff0c;计算各个项目占总体的比例&#xff0c;以及做比率分析&#xff0c; 比率分析&#xff0c;从偿还能力&#xff0c;运营能力&#xff0c;盈利能力三方面分析&#xff1a; 1&#xff09; 偿还能力 2&#xff09…

【工具】--- Adobe Illustrator 下载-入门绘图

文章目录 软件下载入门项目可看课程 尝试使用Adobe Illustrator&#xff08;设计师常用软件&#xff09;进行科研绘图。 软件下载 阿里云盘下载 入门项目 绘制一个箭头并保持为SVG&#xff0c; 直线->画线->窗口->描边->选择想要的箭头样式->颜色->改为蓝…