orm(连接MySQL,增删改,创建表,样例)

1.启动数据库

mysql -u root -p
password:(输入密码)

2.创建数据库

create database stu DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

3.更改Django中settings.py文件配置

Django连接数据库:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'stu',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': 3306,
    }
}

4.models.py文件中创建表(每写一个类就创建一张表)

from django.db import models

class StuInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

此操作相当于MySQL中的

create tables app01_stuinfo{
    id bigint auto_increment primary key,
    name varchar(32),
    password varchar(64),
    age int
}

5.终端执行命令,转换为mysql语句(前提:APP已注册):

python manage.py makemigrations
python manage.py migrate

6.结果展示

Django连接数据库

注:因为Django本身默认提供了其他的APP,并且依赖于数据库的一些表,所以也同时生成了默认的APP的表。
Django提供的APP
此时,一个简单的数据库就创建完成了。


在对Django数据库进行创建和修改表结构操作时,直接更改models.py文件然后进行`python manage.py makemigrations` `python manage.py migrate`两个操作即可。例如删除一列,增加一行。但是在增加一个属性时,存在一个问题,即当增加一个属性时,已存在的元组没有该属性,此时不知道用什么值,所以Pycharm会提示:

在这里插入图片描述
(1)自己为该列输入一个值

(2)直接退出,为该属性设置一个默认值

在这里插入图片描述


操作表中的数据(不用SQL语句)

添加数据、新建数据

添加一个页面

path('info/', views.info),

添加函数(若添加元组成功则info页面显示成功)

from app01.models import StuInfo


def info(request):
    StuInfo.objects.create(name="Alex", password="123321", age=19, classroom=3)
    StuInfo.objects.create(name="Bob", password="123421", age=16, classroom=6)
    StuInfo.objects.create(name="John", password="1541", age=17, classroom=8)

    return HttpResponse("成功!")

查看数据库表格是否成功 (?) 成功!
在这里插入图片描述


删除操作

1,按条件删除(先筛选,再删除)

StuInfo.objects.filter(id=2).delete()

在这里插入图片描述
2,全部删除

StuInfo.objects.all(id=2).delete()

获取数据
    data_list = StuInfo.objects.all()
    print(data_list) 

data_list 是由对象组成的列表
在这里插入图片描述


更新数据

1,更新所有数据

StuInfo.objects.all().update(classroom=1)

2,按条件更新数据

StuInfo.objects.filter(name="John").update(classroom=10)



案例:用户管理

1,展示用户列表

infolist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>info列表</h3>
<table border="1" cellspacing="0">
    <thead>
    <tr>
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>班级</th>
    </tr>
    </thead>
    <tbody>
    {% for obj in data_list %}
    <tr>

        <th>{{ obj.id }}</th>
        <th>{{ obj.name }}</th>
        <th>{{ obj.age }}</th>
        <th>{{ obj.classroom }}</th>

    </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>

views.py

from django.shortcuts import render, HttpResponse, redirect
from app01.models import StuInfo
def infolist(request):
    data_list = StuInfo.objects.all()
    return render(request, "infolist.html", {"data_list": data_list})

models.py

path('infolist/', views.infolist),

models.py

from django.db import models

class StuInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()
    classroom = models.IntegerField()

渲染+返回给用户
在这里插入图片描述

结果展示
在这里插入图片描述

2,添加用户
  • url
  • 函数
    • GET请求,看到页面,输入内容
    • POST请求,获取数据,写入到数据库
  • urls.py

    path('infoadd/', views.infoadd),
    

    infoadd.html 制做前端页面,并将输入的内容发送到后端 。 {% csrf_token %}(不要忘记!)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>添加信息</h1>
    <form method="post">
        {% csrf_token %}
        <input type="text" name="user" placeholder="用户名">
        <input type="text" name="age" placeholder="年龄">
        <input type="password" name="password" placeholder="密码">
        <input type="text" name="classroom" placeholder="所在班级">
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
    

    在这里插入图片描述

    views.py 获取数据并添加用户写入数据库成功后 跳转到用户信息页面

    def infoadd(request):
        if request.method == "GET":
            return render(request, "infoadd.html")
        user = request.POST.get("user")
        age = request.POST.get("age")
        password = request.POST.get("password")
        classroom = request.POST.get("classroom")
        StuInfo.objects.create(name=user, age=age, password=password, classroom=classroom)
        return redirect("/infolist")
    

    在这里插入图片描述

    3,删除用户

    添加url

    path('delete/', views.delete),
    

    添加函数

    def delete(request):
        nid = request.GET.get("nid")
        StuInfo.objects.filter(id=nid).delete()
        return HttpResponse("删除成功!")
    
    

    更改infolist.html,增加删除栏

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h3>info列表</h3>
    <table border="1" cellspacing="0">
        <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>班级</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        {% for obj in data_list %}
        <tr>
    
            <th>{{ obj.id }}</th>
            <th>{{ obj.name }}</th>
            <th>{{ obj.age }}</th>
            <th>{{ obj.classroom }}</th>
            <th>
                <a href="/delete/?nid={{ obj.id }}">删除</a>
            </th>
        </tr>
        {% endfor %}
        </tbody>
    </table>
    </body>
    </html>
    

    效果显示
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一起学算法(插入排序篇)

概念&#xff1a; 插入排序&#xff08;inertion Sort&#xff09;一般也被称为直接插入排序&#xff0c;是一种简单的直观的排序算法 工作原理&#xff1a;将待排列元素划分为&#xff08;已排序&#xff09;和&#xff08;未排序&#xff09;两部分&#xff0c;每次从&…

QT 视图(view)模型(model)汇总

QStringListModel和QListView UI界面 widget头文件 #ifndef WIDGET_H #define WIDGET_H#include <QStringList> #include <QStringListModel> #include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : publi…

认识 springboot 并了解它的创建过程 - 1

前言 本篇介绍什么是SpringBoot, SpringBoot项目如何创建&#xff0c;认识创建SpringBoot项目的目录&#xff0c;了解SpringBoo特点如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1.什么是springboot?2.为什么…

COMSOL三维Voronoi图泰森多边形3D模型轴压模拟及建模教程

多晶体模型采用三维Voronoi算法生成&#xff0c;试件尺寸为150150300mm棱柱模型&#xff0c;对晶格指定五种不同材料&#xff0c;实现晶格间的差异性。 对试件进行力学模拟&#xff0c;下侧为固定边界&#xff0c;限制z方向的位移&#xff0c;上表面通过给定位移的方式实现轴…

应用开发者的疑问:大模型是银弹吗?

被当成银弹的大模型 ChatGPT 火了之后&#xff0c;大模型似乎被当成了真正的银弹&#xff0c;所有的体验问题都想通过大模型解决&#xff1a; 能不能和大模型对话订机票&#xff1f;自然语言生成 SQL&#xff0c;简化报表分析工作&#xff1f;大模型帮老年人操作软件&#xff…

rpc通信原理浅析

rpc通信原理浅析 rpc(remote procedure call)&#xff0c;即远程过程调用&#xff0c;广泛用于分布式或是异构环境下的通信&#xff0c;数据格式一般采取protobuf。 protobuf&#xff08;protocol buffer&#xff09;是google 的一种数据交换的格式&#xff0c;它独立于平台语…

第2章 逻辑分页、AutoFac注入、工作单元与仓储

1 CoreCms.Net.Model.ViewModels.Basics.IPageList<T> namespace CoreCms.Net.Model.ViewModels.Basics { ///<typeparam name"T">泛型类型实例(1个指定实体的类型实例)。</typeparam> /// <summary> /// 【逻辑分页列表--接口】 /// <…

qt添加图标

1.添加资源 选择QtWidgetsApp.qrc文件打开 添加图标文件路径 添加图标文件 2.按钮添加图标 图标路径为:/res/res/swicth.jpg &#xff08;1&#xff09;代码设置图标 ui.pushButton_OPen->setIcon(QIcon(":/res/res/swicth.jpg")); &#xff08;2&#xff09;属…

MySQL数据库——DQL操作——基本查询

文章目录 前言事前准备——测试数据整表查询指定列查找别名查询MySQL运算符条件查询模糊查询排序查询聚合查询分组查询分组之后的条件筛选 分页查询将整张表的数据插入到另一张表中 前言 MySQL数据库常见的操作是增删查改&#xff0c;而其中数据的查询是使用最多&#xff0c;也…

WormGPT – 网络犯罪分子用来犯罪的人工智能工具

WormGPT – 网络犯罪分子用来发起商业电子邮件泄露攻击的生成式人工智能工具 前言 什么是蠕虫GPT&#xff08;WormGPT&#xff09; WormGPT是基于EleutherAI于2021年创建的大型语言模型GPT-J的AI模型。它具有无限的字符支持、聊天记忆保留和代码格式化功能。 如果未部署适当…

行为型:发布订阅模式

定义   发布订阅模式是基于一个事件&#xff08;主题&#xff09;通道&#xff0c;希望接收通知的对象Subscriber&#xff08;订阅者&#xff09;通过自定义事件订阅主题&#xff0c;被激活事件的对象 Publisher &#xff08;发布者&#xff09;通过发布主题事件的方式通知订…

AI 绘画Stable Diffusion 研究(二)sd模型ControlNet1.1 介绍与安装

部署包作者:秋葉aaaki 免责声明: 本安装包及启动器免费提供 无任何盈利目的 大家好&#xff0c;我是风雨无阻。 众所周知&#xff0c;StableDiffusion 是非常强大的AI绘图工具&#xff0c;需要详细了解StableDiffusion的朋友&#xff0c;可查看我之前的这篇文章&#xff1a; …

深度学习实践——模型部署优化实践

系列实验 深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 源码&#xff1a; 1. 对应的github地址 https://github.com/Asionm/streamlit_demo 2. 对应的gitee地…

fwrite函数

1、函数声明 size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream ); 2、参数说明 buffer 指向要写入的数据的指针。 size 项大小&#xff08;以字节为单位&#xff09;。 count 要写入的项的最大数量。 stream 指向 FILE 结构的指针。 3、…

【机器学习】Cost Function

Cost Function 1、计算 cost2、cost 函数的直观理解3、cost 可视化总结附录 首先&#xff0c;导入所需的库&#xff1a; import numpy as np %matplotlib widget import matplotlib.pyplot as plt from lab_utils_uni import plt_intuition, plt_stationary, plt_update_onclic…

C# VS2022+WinForm+Oracle19.3+存储过程,SQL和代码分离

【我的目的】&#xff1a;SQL和代码分别存放在不同的地方&#xff0c;便于随时修改SQL的内容&#xff0c;也便于修改SQL的书写格式 方案1&#xff1a;把SQL存放在DataSet.xsd中实现SQL和代码分离 方案2&#xff1a;用存储过程实现SQL和代码分离 我最倾向方案1&#xff0c;利用…

网络安全(黑客)自学误区

前言 网络安全是当今社会中至关重要的议题。随着科技的迅猛发展&#xff0c;网络已经渗透到我们生活的方方面面&#xff0c;给我们带来了巨大的便利和机遇。然而&#xff0c;网络也存在着各种风险和威胁&#xff0c;如黑客攻击、数据泄露等。因此&#xff0c;学习网络安全知识…

给你一个项目,你将如何开展性能测试工作?

一、性能三连问 1、何时进行性能测试&#xff1f; 性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的&#xff0c;在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响&#xff0c;过早进入性能测试会出现测试结果不准确、浪费测试资…

一文学会redis在springBoot中的使用

“收藏从未停止&#xff0c;练习从未开始”&#xff0c;或许有那么一些好题好方法&#xff0c;在被你选中收藏后却遗忘在收藏夹里积起了灰&#xff1f;今天请务必打开你沉甸甸的收藏重新回顾&#xff0c;分享一下那些曾让你拍案叫绝的好东西吧&#xff01; 一、什么是redis缓存…

万年历【小游戏】(Java课设)

系统类型 Java实现的小游戏 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Idea或eclipse 运行效果 更多Java课设系统源码地址&#xff1a;更多Java课设系统源码地址 更多Java小游戏运行效果展示&#xff1a;更多Java小游戏运行效果展…