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博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

Apache Dubbo知识点表格总结

Dubbo是一个高性能的Java RPC框架,它提供了一系列的功能来支持分布式系统的开发。通常用于微服务之间的服务调用,顺便提一下也是用于微服务之间调用的OpenFeign,OpenFeign是Spring Cloud体系中的一个声明式HTTP客户端,用于简化HTT…

Django知识点总结

因为最近在搞一个Python项目,使用的Django框架。所以快速学习了一下这个web框架。并做一些总结。 Django官网的介绍:Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experience…

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

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

设计模式:建造者模式

目录 一,概念 二,不使用建造者有什么麻烦 三,格式 一,概念 建造者模式(Builder Pattern)是一种创建型设计模式,用于将复杂对象的构建与其表示分离,以便同样的构建过程可以创建不同…

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

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

nginx封禁恶意IP

网络攻击时有发生 TCP洪水攻击、注入攻击、DOS等比较难防的有DDOS等 为了数据安全,防止对手爬虫恶意爬取,封禁IP 一般封禁ip linux server层面封IP:iptablesnginx层面封IP,方式多种(但req还是会打进来,让…

21-ESP32-S3实时时钟(RTC)

ESP32-S3实时时钟(RTC)的使用 ESP32-S3是一款高性能的Wi-Fi和蓝牙集成的系统级芯片(SoC),它包含一个实时时钟(RTC)模块,可以在系统的其他部分关闭时继续运行,以节省电能…

IDEA 申请学生许可证

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

Flask知识点汇总表格总结

最近接手的Python项目有两个,一个是Django项目,一个是Flask项目,Django昨天做了一个比较全面的总结,今天再就Flask做一个知识总结。我这相当于是项目驱动学习类型。 Flask是一个轻量级的Python Web应用框架,它被设计为…

智能数据分析平台待修复BUG以及待完成需求

快速跳转:何耳林毕设项目介绍-CSDN博客 BUG 1.个人图标页搜索功能,不能进行搜索 2.用户管理功能头部搜索栏有多余搜索项 3.修改用户权限等信息会影响当前管理用户 待完成需求 1.新增AI问答功能 2.图标页自动刷新功能 3.将个人页更改到头像下拉框&…

分类规则挖掘(三)

目录 四、贝叶斯分类方法(一)贝叶斯定理(二)朴素贝叶斯分类器(三)朴素贝叶斯分类方法的改进 五、其它分类方法 四、贝叶斯分类方法 贝叶斯 (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…

Python网络编程:从基础到实践

Python 是一种广泛应用于网络编程的高级编程语言,它简单易学,功能强大,深受广大开发者的喜爱。本文将带你深入了解 Python 网络编程的基础知识,并通过实际案例,让你掌握如何使用 Python 进行网络编程。 第一部分&…

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…