当前位置: 首页 > news >正文

【Django 02】数据表构建、数据迁移与管理

1. Django 构建数据表创建与数据迁移

1.1 数据表创建

1.1.1 模块功能

如前所述,models.py文件主要用一个 Python 类来描述数据表。运用这个类,可以通过简单的 Python 代码来创建、检索、更新、删除
数据库中的记录而无需写一条又一条的SQL语句。今天的例子就是在model.py中创建两个表:产品分类表和产品信息表。

1.1.1.1 models.py

产品分类表

class GoodsCategory(Model):name = CharField(max_length=64, verbose_name='名称')remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')

产品信息表

class Goods(Model):number = CharField(max_length=32, verbose_name='编号')name = CharField(max_length=64, verbose_name='名称')barcode = CharField(max_length=32, null=True, blank=True, verbose_name='条码')category = ForeignKey('goods.GoodsCategory', on_delete=SET_NULL, null=True,related_name='goods_set', verbose_name='产品分类')spec = CharField(max_length=64, null=True, blank=True, verbose_name='规格')shelf_life_days = IntegerField(null=True, verbose_name='保质期天数')purchase_price = FloatField(default=0, verbose_name='采购价')retail_price = FloatField(default=0, verbose_name='零售价')remark = CharField(max_length=256, null=True, blank=True, verbose_name='备注')

1.2 合并数据库

这两个命令是Django框架中的关键命令,用于进行数据库迁移。当你修改了Django模型后,你需要运行这两个命令,以将这些更改应用到数据库中。

python manage.py makemigrations

这个命令用于生成迁移脚本。当你更新了模型文件之后,需要运行该命令,Django会检测模型的改变,然后自动生成相应的迁移脚本,存储在migrations/目录下。通常来说,你需要针对每个应用运行一次该命令。

python manage.py migrate

这个命令用于将迁移脚本应用到数据库中。当你在模型文件中进行更改之后,需要先通过makemigrations命令生成迁移脚本,然后运行该命令将这些脚本应用到数据库中。对于新的迁移脚本,Django会逐个执行它们,从而更新数据库结构。对于已经执行过的脚本,Django会跳过它们,避免重复执行。

这两个命令是Django框架中非常重要的命令,在修改数据库相关内容时必须时刻清醒地记住使用它们。

在这里插入图片描述

2. Django-models的常用字段和常用配置

2.1 常用字段

CharField 用于存储字符串类型,有最大长度限制

IntegerField 用于存储整数类型

FloatField用于存储浮点数类型

BooleanField 用于存储布尔类型

DateField 用于存储日期类型

DateTimeField 用于存储日期和时间类型

ImageField 用于存储图片类型

FileField 用于存储文件类型

ForeignKey 外键 用于表示数据库表之间的关联关系

OneToOneField 一对一 用于表示一对一的关联关系

ManyToManyField 多对多 用于表示多对多的关联关系
  ‍

2.2 常用配置

max_length 字段的最大长度限制,可以应用于多种不同的字段类型。

verbose_name 字段的友好名称,便于在管理员后台可视化操作时使用。

default 指定字段的默认值。

null 指定字段是否可以为空。

null=True 设置允许该字段为 NULL 值

blank 指定在表单中输入时是否可以为空白。

choices 用于指定字段的可选值枚举列表,在最上面定义

2.3 字段定义

`class DeliveryMaterial(Model):``class Status(TextChoices):``QUALIFIED = ('qualified', '良品')`
`UNQUALIFIED = ('unqualified', '不良品')``status = CharField(max_length=32, choices=Status.choices, default=Status.QUALIFIED, verbose_name='状态')`

TextChoices 是 Django 3.0 引入的一个枚举类,用于在模型字段中创建可选择的、文本值的选项。
related_name 指定在多对多等关系中反向使用的名称。

on_delete 指定如果外键关联的对象被删除时应该采取什么操作。

3. Django-admin 引入admin后台和管理员

3.1 创建管理员

3.1.1 创建后台 admin 管理员

在终端运行命令

python manage.py createsuperuser

登录 admin 后台

http://127.0.0.1:8000/admin

python manage.py runserver

在这里插入图片描述

3.2 配置

admin.py文件中注册你的模型:

from django.contrib import admin
from .models import * # 引入产品表# 一定要分开逐个注册,不能放在一起admin.site.register(Goods)# 在admin站点中 注册产品表admin.site.register(GoodsCategory) # 在admin站点中 注册产品表

在这里插入图片描述

3. 构建数据表(外键的使用)

3.1 外键

models.py

category = ForeignKey(GoodsCategory,on_delete=SET_NULL,related_name='goods_set',null=True,verbose_name='产品分类')

on_delete 设置当外键对应的数据被删除时的反应
null=True

外键的概念

外键是一种用于建立表之间关联关系的约束,通常指的是一个模型中的一个或多个字段的值必须符合另一个模型中对应字段的值。

增加数据

  • 苹果 - 水果
  • 桃子 - 水果
  • 猴子 - 动物
  • 大象 - 动物
  • 构建根据分类获取某个分类下的产品 API

views.py

from django.shortcuts import render
from rest_framework.response import Response
from .models import *
from rest_framework.decorators import api_view
from django.shortcuts import get_object_or_404
# Create your views here.
# GET
# POST# 函数式编程
@api_view(['POST', 'GET'])
def InsertGoodsCategory(request):category_name = request.data.get('分类名字')# 获取分类对象或创建新的分类对象category, created = GoodsCategory.objects.get_or_create(name=category_name)# 判断是否已存在分类if not created:return Response({"status": "已存在", "goods_category": category_name}, status=200)else:return Response({"message": f"Successfully inserted category '{category_name}'."})@api_view(['POST','GET'])
def FilterGoodsCategory(request):data = request.data.get('分类名字')goods = GoodsCategory.objects.filter(name=data)if goods.exists():return Response({"status": "已存在", "goods_category": data}, status=200)else:return Response({"status": "不存在" ,"goods_category": data}, status=404)

urls.py

  • 放入路由
from django.contrib import admin
from django.urls import path
from apps.erp_test.views import *urlpatterns = [path('admin/', admin.site.urls),path('filtergoodscategory/', FilterGoodsCategory),path('insertgoodscategory/', InsertGoodsCategory),]
  • 使用postman针对insertGoodsCategory/filtergoodscategory/API接口进行测试,测试结果如下
    在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

相关文章:

【Django 02】数据表构建、数据迁移与管理

1. Django 构建数据表创建与数据迁移 1.1 数据表创建 1.1.1 模块功能 如前所述,models.py文件主要用一个 Python 类来描述数据表。运用这个类,可以通过简单的 Python 代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。今天的例子就是在…...

一天吃透Java集合面试八股文

内容摘自我的学习网站:topjavaer.cn 常见的集合有哪些? Java集合类主要由两个接口Collection和Map派生出来的,Collection有三个子接口:List、Set、Queue。 Java集合框架图如下: List代表了有序可重复集合&#xff0c…...

高级深入--day36

Settings Scrapy设置(settings)提供了定制Scrapy组件的方法。可以控制包括核心(core),插件(extension),pipeline及spider组件。比如 设置Json Pipeliine、LOG_LEVEL等。 参考文档:Settings — Scrapy 1.0.5 文档 内置设置参考手册 BOT_NAME 默认: scrapybot 当您使用 sta…...

Jmeter接口测试工具的一些使用小技巧

如何使用英文界面的JMeter Jmeter启动时会自动判断操作系统的locale 并选择合适的语言启动,所以,我们启动jmeter后,其会出现一个倍感亲切的中文界面。但由于jmeter本身的汉化工作做得不好,你会看到有未被汉化的选项及元件的参数。…...

黄金眼PAAS化数据服务DIFF测试工具的建设实践 | 京东云技术团队

一、背景介绍 黄金眼PAAS化数据服务是一系列实现相同指标服务协议的数据服务,各个服务间按照所生产指标的主题作划分,比如交易实时服务提供实时交易指标的查询,财务离线服务提供离线财务指标的查询。黄金眼PAAS化数据服务支撑了黄金眼APP、黄…...

深入了解RPA业务流程自动化的关键要素

在RPA业务流程自动化实施过程中,哪些因素起着至关重要的作用?这其实没有一个通用的答案,每一个RPA业务流程自动化的部署,都需要结合具体场景去调整,并且进行全面的规划。 首当其冲是要关注以下几点: 1、专…...

CSS记录

1.标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的? 标准盒子模型box-sizing: border-box; 宽度内容的宽度(content) border padding margin 低版本IE盒子模型:宽度内容宽度(contentborderpaddin…...

Kotlin中类型转换

在 Kotlin 中,类型转换是一种常见的操作,用于将一个数据类型转换为另一个数据类型。在本篇博客中,我们将介绍 Kotlin 中的类型转换,并提供示例代码演示智能类型转换、强制类型转换以及可空类型的转换。 智能类型转换是 Kotlin 中…...

P7557 [USACO21OPEN] Acowdemia S

典型二分&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long const int N1e510; int n,a[N],k,l; bool check(int x) {int cnt0,ans0;for(int i1; i<x; i) {if(a[i]>x) {cnt;continue;}else{if(x-a[i]>k)return false;else{ansans…...

如何确认栈中申请的变量地址

一般一个程序被加载到内存后执行而成为一个进程。进程在内存中是分区域加载的&#xff0c;分别是代码段、数据段、bss段等等。 函数中定义的变量一般存在于栈中。现在我们通过实验验证一下&#xff0c;函数中定义的变量&#xff0c;到底存在与进程哪个位置。 1.测试程序 #in…...

【STM32】--基础了解

一、STM32来历背景 1.从51到STM32 &#xff08;1&#xff09;单片机有很多种 &#xff08;2&#xff09;STM32内核使用ARM&#xff0c;但是ARM不一定是STM32 &#xff08;3&#xff09;ATM32是当前主流的32位高性能单片机 &#xff08;4&#xff09;STM32的特点&#xff1a;高…...

join、inner join、left join、right join、outer join的区别

内连接 inner join(等值连接)&#xff1a;只显示两表联结字段相等的行&#xff0c;(很少用到&#xff0c;最好别用)&#xff1b; 外连接 left join&#xff1a;以左表为基础,显示左表中的所有记录,不管是否与关联条件相匹配,而右表中的数据只显示与关联条件相匹配的记录,不匹配…...

小程序中如何使用自定义组件应用及搭建个人中心布局

一&#xff0c;自定义组件 从小程序基础库版本 1.6.3 开始&#xff0c;小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。 开发者可以将页面内的功能模块抽象成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的…...

pyest+appium实现APP自动化测试,思路全总结在这里

01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs&#xff1f; 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#xff0c;并且配置环境变量 为什么要装jdk&#xff1f; 因为我们要测试安卓&#xff0c;那么安卓的调试环境需要依赖jdk …...

ES6 Set数据结构

1.Set 是什么 Set是新的引用型的数据结构 它类似于数组&#xff0c;但是成员的值都是唯一的&#xff0c;没有重复的值。 Set本身是一个构造函数&#xff0c;用来生成 Set 数据结构。 Set函数可以接受一个数组作为参数&#xff0c;用来初始化。 2.Set特性&#xff08;重点概…...

Semaphore(信号量)

信号量就是通过AQS的共享锁机制来实现的。这个类总体比较简单&#xff0c;就不做过多描述。 Sync同步器 abstract static class Sync extends AbstractQueuedSynchronizer {private static final long serialVersionUID 1192457210091910933L;//初始化permits许可数&#xf…...

InnoDB 与 MyISAM的比较(含其他存储引擎)

文章目录 什么是搜索引擎MyISAMInnoDB比较表格 MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后&#xff0c;默认采用InnoDB引擎 。 什么是搜索引擎 MySQL的存储引擎是用于管理数据的底层系统组件&#xff0c;它定义了数据如何存储、检索和管理。不同的存储引擎提…...

系统韧性研究(2)|系统韧性如何关联其他质量属性?

对大多数人来说&#xff0c;如果一个系统在逆境中继续执行它的任务&#xff0c;那么它会被认为具有韧性。换句话说&#xff0c;尽管过度的压力或多或少都会导致系统中断&#xff0c;但如果系统依然能够正常运行并提供所需的能力&#xff0c;则可认为该系统具备韧性。 系统韧性…...

电脑桌面记事本便签软件哪个好?

很多人的电脑或者手机上都离不开一款好用的便签软件&#xff0c;使用便签软件可以帮助大家记事&#xff0c;提醒大家按时完成各项任务&#xff0c;但是自带的记事本便签软件不论从外观还是功能方面都有一定的欠缺&#xff0c;在使用过程中很容易耽误事情。 功能全面外观好看的…...

可视化(Visual) SQL初探

一、背景 在当今数字化时代&#xff0c;数据信息作为企业和组织的宝贵资源之一&#xff0c;如何挖掘其中的价值并帮助企业和组织个体决策&#xff0c;已然成为炙手可热的话题。数据分析作为其具体载体&#xff0c;是从数据中提取信息、洞察机遇、制定战略、做出决策的关键过程…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...