Python通过定义类实现增删改查(期末考试)

python高级编程期末测试

别看我挣的少,但是我省的多,昨天法拉利又省下两百多万。

一、通过创建自己类来实现增删改查

我们已经利用模型实现单表的增删改查了 现在 我们不想使用模型来操作数据库
我们可以自己定义模型

那么 如何通过自己创建的类实现增删改查

1.增加代码展示:

from django.test import TestCase

# Create your tests here.
import pymysql
# 我们已经利用模型实现单表的增删改查了 现在 我们不想使用模型来操作数据库
# 我们可以自己定义模型

class Stu:
    def __init__(self,sid,sname,ssex):
        self.sid=sid
        self.sname=sname
        self.ssex=ssex
class StuDao:
    def __init__(self):
        # 建立连接
        self.con=pymysql.connect(host="localhost",user="root",password="123456",port=3306,database="jtxy")
    def add(self,name,sex):
        # 得到操作数据库的游标对象
        cur=self.con.cursor()
        # 执行insert sql %s表示字符串
        cur.execute("insert into stu values('%s','%s',null)"%(name,sex))
        # 提交sql
        self.con.commit()
        # 关闭连接释放内存
        self.con.close()

我们修改一下视图函数中的增加内容 将原来的模型替换为我们自己定义的类

def addStu(request):
    #数据库在哪儿 数据库名 用户名 密码
    name=request.POST.get("sname")
    sex=request.POST.get("ssex")
    dao=StuDao()
    dao.add(name,sex)
    #stu=Student.objects.create(sname=name,ssex=sex)
    # stu=Student(sname=name,ssex=sex)
    #stu.save()
    return render(request,"add_stu.html")

点击重新运行 我们输入试一下能不能运行

添加成功

2.查询代码展示:

    def findStudent(self):
        # 得到操作数据库的游标对象
        cur = self.con.cursor()
        cur.execute("select sid,sname,ssex from stu")
        # 获取学生表的所有记录列表studentsList[[1,jhw,nan],[2,yy1,nv]]
        studentList=cur.fetchall()
        stuList=[]
        for lst in studentList:
            stuList.append(Stu(lst[0],lst[1],lst[2]))
        # 关闭连接释放内存
        self.con.close()
        return stuList

同理 我们修改一下视图函数中的查询内容 将原来的模型替换为我们自己定义的类

def findStu(request):
    # 从表中获取所有数据
    # students=Student.objects.all()
    # {表示把数据带到网页上}
    dao=StuDao()
    students=dao.findStudent()
    return render(request, "show_stu.html",{"students":students})

我们点击查询 发现页面依旧还在 说明可以查询

3.删除代码展示:

 def deleteById(self,id):
        # 得到操作数据库的游标对象
        cur = self.con.cursor()
        cur.execute("delete from stu where sid=%d"%(int(id)))
        # 提交sql
        self.con.commit()
        # 因为删除以后 还要返回查询结果 所以我们在这里不关闭连接 在查询处关闭即可
        # 关闭连接释放内存
        # self.con.close()

同理 我们修改一下视图函数中的删除内容 将原来的模型替换为我们自己定义的类

def deleteStuById(request):
    id=request.GET.get("id")
    dao=StuDao()
    dao.deleteById(id)
    # 再查询一遍
    students = dao.findStudent()
    # Student.objects.filter(sid=id).delete()
    # 从表中获取所有数据
    # students=Student.objects.all()
    # {表示把数据带到网页上}
    return render(request, "show_stu.html",{"students":students})

我们点击删除 删除成功

4.修改代码展示:

1)回显

    def findStudentById(self,id):
        # 得到操作数据库的游标对象
        cur = self.con.cursor()
        cur.execute("select sid,sname,ssex from stu where sid=%d" %(int(id)))
        # 获取学生表的一条记录[[1,jhw,nan]
        lst=cur.fetchone()
        stu=Stu(lst[0],lst[1],lst[2])
        # 关闭连接释放内存
        self.con.close()
        return stu

同理 我们修改一下视图函数中的根据id查找内容 将原来的模型替换为我们自己定义的类

def findStuById(request):
    id = request.GET.get("id")
    dao=StuDao()
    stu=dao.findStudentById(id)
    # stu=Student.objects.filter(sid=id).first()
    # {表示把数据带到网页上} 所以我们创建一个网页
    return render(request, "updateStu.html", {"students": stu})

我们点击修改 可以看到 成功回显

2)修改

 def updateStuById(self,id,name,sex):
        # 得到操作数据库的游标对象
        cur = self.con.cursor()
        cur.execute("update stu set sname='%s',ssex='%s' where sid=%d" % (name,sex,int(id)))
        # 提交sql
        self.con.commit()

修改视图函数

def updateStu(request):
    sid=request.POST.get("sid")
    sname=request.POST.get("sname")
    ssex=request.POST.get("ssex")
    # 创建模型
    # stu=Student.objects.filter(sid=sid).first()
    # stu.sname=sname
    # stu.ssex=ssex
    # stu.save()
    dao=StuDao()
    dao.updateStuById(sid,sname,ssex)
    students = Student.objects.all()
    # {表示把数据带到网页上}
    return render(request, "show_stu.html", {"students": students})

我们修改一下内容 将yyq修改为yangkoukou

二、下面我们讲一些标签

1.标签<ul> <li> </li> </ul> :无序列表

2.标签<ol> <li> </li> </ol> :有序列表

 <!--<ul> 无序列表-->
            <ul>
                <li>济南</li>
                <li>淄博</li>
                <li>潍坊</li>
                <li>济宁</li>
            </ul>
            <!--<ol> 有序列表-->
            <ol>
                <li>济南</li>
                <li>淄博</li>
                <li>潍坊</li>
                <li>济宁</li>
            </ol>

3.添加图片:

 <img src="/static/image_2.jpg">

此时我们可能会看不到图片内容 因为我们的django不认识这个图片 所以我们要配置一下

STATIC_URL='static/'
# 指定静态文件夹
STATICFILES_DIRS=[
    BASE_DIR / "static"
]

我们点击查看网页 就可以看到图片了

4.<div> </div>块标记

 <!--块(矩形)标记 加个边框-->
            <div style="border: 1px;border-style: solid;width: 100px;height: 300px">
                内容内容内容内容
                内容内容内容内容
                内容内容内容内容
            </div>

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

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

相关文章

商标注册证下证的前后时间的注意!

近日下了6个商标注册证&#xff0c;商标初审公告是3个月时间&#xff0c;如果没人提出异议&#xff0c;公告结束后1个月内基本上都可以拿到商标注册证电子版&#xff0c;没有纸制版的&#xff0c;凡是邮寄到付签收纸制商标注册证的基本都是骗。 对商标提出异议的主体平常会在公…

2024年03月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;满足条件的数的累加2 现有n个整数&#xff0c;将其中个位数为k的数进行累加求和 输入 第一行一个整数n。第二行n个非负整数&#xff0c;以空格分割&#xff0c;每个数不大于100000。第三行一个整数k。 …

uniapp——列表分享当前话题(一个页面多个分享)

案例 分享的时候弹出对应的标题和默认第一张图片 代码 <view v-for"(item,index) in list" :key"index"><button open-type"share" :id"index" click.stop"()>{}"><image src"/static/images/cir…

多客陪玩系统源码APP小程序H5陪玩开发伴游源码游戏陪玩平台源码陪玩平台开发约单源码线下陪玩接单平台app小程序H5源码游戏陪玩app小程序H5开发

出售成品陪玩app小程序H5源码&#xff0c;免费搭建部署和售后服务&#xff0c;并提供源码二开、定制开发等相关服务。 一、陪玩app源码的功能介绍 1、语音聊天: 陪玩app小程序H5源码用户随时创建语音聊天室&#xff0c;实现多用户上麦功能&#xff0c;提高互动聊天体验。 2、游…

Apache SeaTunnel 4月回顾:明星贡献者与技术突破

各位热爱 SeaTunnel 的小伙伴们&#xff0c;SeaTunnel 社区 4 月份月报来啦&#xff01;这里将记录 SeaTunnel 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge 之星 感谢以下小伙伴 4 月为 Apache SeaTunnel 做的精彩贡献&#xff08;排名不分先后&#xff…

02-单片机商业项目编程,从零搭建低功耗系统设计

一、本文内容 上一节《01-单片机商业项目编程&#xff0c;从零搭建低功耗系统设计-CSDN博客》已经对事件驱动原理有个基本了解&#xff0c;本节主要就是如何将事件写的更规范&#xff0c;而不是用t_flag这样的标记&#xff0c;写多了可读性也不强&#xff1b;本节结尾总结将提出…

蓝牙 | 软件:Git管理高通的ChipCode项目

哈喽大家好&#xff0c;最近发现大家在高通chipcode网站上下载不了代码&#xff0c;小编一直使用git的方式获取新版本代码&#xff0c;没有遇到什么阻碍。于是小编到新主机上尝试下载代码的压缩包和git代码&#xff0c;都遇到了问题。由于压缩包是高通自己处理卡住了&#xff0…

【Mac】LiveWallpaper(超高清4K动态壁纸) 安装教程

软件介绍 今天给大家介绍的一款软件叫Live Wallpaper & Themes 4K Pro&#xff0c;这是一款超高清4K动态壁纸应用程序。 Live Wallpaper & Themes 4K Pro是一款提供高品质动态壁纸和主题的应用程序。以下是它的一些主要特点和功能&#xff1a; 1.高清和4K动态壁纸&a…

Shell变成规范与变量

目录 1. Shell脚本 1.1 Shell脚本概述 1.2 Shell的作用 1.3 Shell脚本的构成 2. 重定向与管道操作 2.1 交互式硬件设备 ​ 2.2 重定向操作 3. shell变量 3.1 自定义变量 3.2 变量的作用范围​编辑 3.3 整数变量的运算 4. 环境变量 4.1 特殊的Shell变量 4.2 只读变…

二总线,替代传统485总线通讯,主动上报方案简易实现方法

二总线通信设计专栏 《二总线&#xff0c;替代传统485总线通讯&#xff0c;选型及应用-CSDN博客》《二总线&#xff0c;替代传统485总线通讯&#xff0c;低成本直流载波方案实现及原理-CSDN博客》《二总线&#xff0c;替代传统485总线通讯&#xff0c;调试避坑指南之最大的电流…

基于springboot+mybatis+vue的项目实战之前端

步骤&#xff1a; 1、项目准备&#xff1a;新建项目&#xff0c;并删除自带demo程序&#xff0c;修改application.properties. 2、使用Apifox准备好json数据的mock地址 3、编写基于vue的静态页面 4、运行 整个的目录结构如下&#xff1a; 0、项目准备 新建项目&#xff0…

G 2024-05-09 开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-09统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6C++项目2TypeScript项目2Jupyter Notebook项目1Lua项目1JavaScript项目1Dify.AI: 开源的LLM应用程序开发平台 创建周期:299 天开发…

22 内核开发-宏内核,微内核探秘

22 内核开发-宏内核&#xff0c;微内核探秘 目录 22 内核开发-宏内核&#xff0c;微内核探秘 1.宏内核 2.宏内核优点 3.宏内核缺点 4.为什么选择宏内核 5.微内核 6.微内核优缺点 7.总结 今天看书&#xff0c;看到一个知识点&#xff1a; 《深入linux内核架构》第7章…

ffmpeg ubuntu18.04编译报错fcntl64

fcntl&#xff0c;fcntl64均是系统的api提供的文件操作&#xff0c;fcntl64本来是用来解决操作大文件的问题&#xff0c;后面fcntl本身已经解决了这个问题&#xff0c;fcntl64就被舍弃了 系统环境信息&#xff1a; ubuntu 18.04 root# cat /etc/issue Ubuntu 18.04.6 LTS \n…

java数据结构之数组系统了解

1.数组介绍 数组就是一个存储数据的容器&#xff0c;容器的长度固定、存储元素的数据类型固定。 跟变量加以区分&#xff1a;变量也可以存储数据&#xff0c;但是只能存一个值。当要存的数据比较多的时候&#xff0c;用变量就不方便了。我们就可以使用数组来存储。 1.1数组…

部分设计模式概述

单例模式 工厂模式 适配器模式 模板方法模式 策略模式 责任链 观察者模式&#xff08;又叫发布订阅模式&#xff09;

【项目学习01_2024.05.08_Day06】

学习笔记 5 新增课程5.1 需求分析5.1.1 业务流程5.1.2 数据模型 5.2 接口定义5.3 接口开发5.3.1 保存课程基本信息5.3.2 保存营销信息 5.4 接口测试 5 新增课程 5.1 需求分析 5.1.1 业务流程 5.1.2 数据模型 5.2 接口定义 5.3 接口开发 根据需求分析&#xff0c;新增课程表…

集成学习案例-幸福感预测

集成学习案例一 &#xff08;幸福感预测&#xff09; 背景介绍 此案例是一个数据挖掘类型的比赛——幸福感预测的baseline。比赛的数据使用的是官方的《中国综合社会调查&#xff08;CGSS&#xff09;》文件中的调查结果中的数据&#xff0c;其共包含有139个维度的特征&#xf…