Django数据库创建存储及管理

embedded/2024/10/18 16:49:22/

一、什么是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.ppmy.cn/embedded/30978.html

相关文章

JAVA顺序表相关习题1

1.笔试题:cvte str1 :welcome to cvte str2:come 描述:删除第一个字符串当中出现的所有的第二个字符串的字符!结果:wlt vt 要求 用ArrayList完成! public class Test {public static List<Character> findSameWords(String u1, String u2){List<Character> listn…

k8s如何写yaml文件

k8s&&如何写yaml文件 metadataspecresources: 如何设置request和limit&#xff1f; status metadata metadata: 通常用于填写一些对象&#xff08;如pod、deployment等&#xff09;的描述信息&#xff08;类似人的名字、年龄等&#xff09;。 spec spec: 通常代表着…

(GEE)2000-2020年黄河流域时序渐变图及高程模型计算 JavaScript版

文章目录 一. 选取目标区域二. NDVI实现三. 高程模型DEM实现四. 时序图五. 植被覆盖类型及其占比六. 散热量折线图六. 参考文献 首先推荐吴秋生老师团队开源的便捷构建网站&#xff1a;适用于地理空间应用的Streamlight 吴秋生老师团队的工具请自行探索。本文讲解基于GEE云开发…

【数据结构与算法】力扣 225. 用队列实现栈

题目描述 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元…

JavaScript+B/S架构云LIS系统源码C# 6.0+MVC+SQLSugar医院版检验科云LIS系统源码 可提供演示

JavaScriptB/S架构云LIS系统源码MVCSQLSugar医院版检验科云LIS系统源码 可提供演示随着医疗技术的不断发展&#xff0c;医疗机构对于信息化、智能化的需求也越来越高。特别是对于检验科这样的核心科室&#xff0c;如何提高工作效率、降低误差率、提高数据安全性成为了亟待解决的…

PHP源码_最新在线工具箱网站系统源码

项目运行截图 源码贡献 https://githubs.xyz/boot?app41 部分数据库表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for toolbox_category -- ---------------------------- DROP TABLE IF EXISTS toolbox_category…

axios.get请求 重复键问题??

封装的接口方法&#xff1a; 数据&#xff1a; 多选框多选后 能得到对应的数组 但是请求的载荷却是这样的,导致会请求不到数据 departmentChecks 的格式看起来是一个数组&#xff0c;但是通常 HTTP 请求的查询参数不支持使用相同的键&#xff08;key&#xff09;名多次。如…

java_递归方法

写在前面 递归就是在一个方法内部调用自己的方法。这样做可以使得代码更简洁&#xff0c;像猴子吃桃就是经典的&#xff0c;但我们这里来简单的递归 看韩顺平老师的图。 代码如下 public class hello{public static void main(String[] args) {System.out.print(\n);//创建对…