数据库实验五:数据库编程

· 浏览次数 : 0

小编点评

本文介绍了一个小型数据库应用程序的设计与实现,包括数据库的选择、表的创建、功能的实现以及程序的运行界面。 1. 数据库选择与表设计 本文选择了现有的数据库“student”作为基础,并根据需求设计了相应的表“infor”,其中包含字段sno(学号)、Sname(姓名)、Ssex(性别)、Sage(年龄)、Smaj(专业)和Srew(奖项)。 2. 功能实现 - 添加学生信息:通过向表中插入学生的学号、姓名、性别、年龄、专业、奖项等信息。 - 修改学生信息:根据学号修改学生的相关信息。 - 删除学生信息:根据学号删除学生的所有信息。 - 查询学生信息:根据学号查询学生的所有信息。 3. 程序实现 本文采用Python语言连接MySQL数据库,使用pymysql作为驱动,同时利用tkinter构建图形化界面,通过按钮事件触发不同的功能实现。 4. 界面布局与控件 本文设计了窗口,包含标签、输入框、下拉列表等控件,用于用户输入和选择数据。同时,使用分隔线、按钮等控件进行界面的布局和功能区分。 综上所述,本文完成了一个小型数据库应用程序的设计与实现,包括数据库的选择、表的创建、功能的实现以及程序的运行界面。

正文

2、设计一个小型的数据库应用程序
 可利用现有的数据库,也可重新设计数据库。
 要求实现数据的增加、删除、修改、查询的功能。
 在报告中描述清楚使用的数据库、数据表及实现的功能(要求截图,并附
代码)
设计一个小型的数据库应用程序

数据库名:student

表名:infor

字段:

  Sno:学号 
  Sname:姓名
  Ssex:性别
  Sage:年龄
  Smaj:专业
  Srew:奖项

功能实现

1. 添加学生信息:向表中插入学生的学号、姓名、性别、年龄、专业、奖项。
2. 修改学生信息:根据学号修改学生的姓名、性别、年龄、专业、奖项。
3. 删除学生信息:根据学号删除学生的所有信息。
4. 查询学生信息:根据学号查询学生的所有信息。

   程序实现(Python连接MySQL)
import pymysql  # python连接mysql的驱动
import tkinter as tk  # 图形化界面的模块
import tkinter.ttk as ttk
import tkinter.messagebox  # 要使用messagebox先要导入模块

table = "infor"

# 建立连接,在每个按钮的函数里创建游标
db = pymysql.connect(host="192.168.163.241", user="root", passwd="123456", db="student", port=3306, charset='utf8')

# 清空输入框内容
def clearAll():
    entryId.delete(0, 'end')
    entryName.delete(0, 'end')
    entryMaj.delete(0, 'end')
    entryRew.delete(0, 'end')
    spinboxSex.delete(0, 'end')
    spinboxAge.delete(0, 'end')


# 根据学号进行查询
def search():
    cursor = db.cursor()
    student_id = entryId.get()

    if student_id != '':
        try:
            student_id = int(student_id)
            sql = "SELECT *, Srew FROM {} WHERE Sno = {}".format(table, student_id)
            cursor.execute(sql)
            result = cursor.fetchone()
            if result is not None:
                data = list(result)
                tk.messagebox.showinfo(title='Info', message=tuple(data))
            else:
                tk.messagebox.showerror(title='错误!', message='查无此人!请重新输入!')
        except:
            tk.messagebox.showerror(title='错误!', message='输入错误!请重新输入!')

    clearAll()
    cursor.close()

# 修改 信息
def alter():
    cursor = db.cursor()
    id = entryId.get()
    name = entryName.get()
    sex = spinboxSex.get()
    age = spinboxAge.get()
    maj = entryMaj.get()
    rew = entryRew.get()
    if (id != ''):
        try:
            id = int(id)
            sql = "select * from {} where Sno = {}".format(table, id)
            cursor.execute(sql)
            if (cursor.fetchone() != None):

                sql1 = "update infor set Sname = '{}', Ssex = '{}', Sage = {}, Smaj = '{}', Srew = '{}' where Sno = {}".format(
                    name, sex, age, maj, rew, id)
                cursor.execute(sql1)
                tk.messagebox.showinfo(title='Info', message='修改成功')
            else:
                tk.messagebox.showerror(title='错误!', message='查无此人!请重新输入!')
        except:
            tk.messagebox.showerror(title='错误!', message='输入错误!请重新输入!')
    else:
        tk.messagebox.showerror(title='错误!', message='学号不能为空!请重新输入!')
    db.commit()
    clearAll()
    cursor.close()



# 根据学号 进行删除
def delete():
    cursor = db.cursor()
    id = entryId.get()
    if (id != ''):
        try:
            id = int(id)
            sql = "select * from {} where Sno = {}".format(table, id)
            cursor.execute(sql)
            if (cursor.fetchone() != None):
                sql1 = "delete from {} where Sno = {}".format(table, id)
                cursor.execute(sql1)
                sql2 = "delete from {} where Sno = {}".format(table, id)
                cursor.execute(sql2)
                tk.messagebox.showinfo(title='Info', message='删除成功')
            else:
                tk.messagebox.showerror(title='错误!', message='查无此人!请重新输入!')
        except:
            tk.messagebox.showerror(title='错误!', message='输入错误!请重新输入!')
    else:
        tk.messagebox.showerror(title='错误!', message='学号不能为空!请重新输入!')
    db.commit()
    clearAll()
    cursor.close()

# !!!python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。插入内容
def insert():
    cursor = db.cursor()
    id = entryId.get()
    name = entryName.get()
    sex = spinboxSex.get()
    age = spinboxAge.get()
    maj = entryMaj.get()
    rew = entryRew.get()
    if (id != ''):
        id = int(id)
        sql = "select * from {} where Sno = {}".format(table, id)
        cursor.execute(sql)
        if (cursor.fetchone() != None):
            tk.messagebox.showerror(title='错误!', message='已有此人!请重新输入!')
        else:
            sql1 = "insert into infor (Sno, Sname, Ssex, Sage, Smaj, Srew) values({}, \"{}\", \"{}\", {}, \"{}\", \"{}\")".format(
                id, name, sex, age, maj, rew)
            cursor.execute(sql1)
            tk.messagebox.showinfo(title='Info', message='添加成功!')
    else:
        tk.messagebox.showerror(title='错误!', message='学号不能为空!请重新输入!')
    db.commit()
    clearAll()
    cursor.close()


# 控件的布局
windows = tk.Tk()
windows.title('学生信息管理')
# 第1行控件
lblId = tk.Label(text='学号:')
lblId.grid(row=0, column=0)
entryId = tk.Entry()
entryId.grid(row=0, column=1)
lblName = tk.Label(text='姓名:')
lblName.grid(row=0, column=2)
entryName = tk.Entry()
entryName.grid(row=0, column=3)
# 第2行控件
lblSex = tk.Label(text='性别:')
lblSex.grid(row=1, column=0)
spinboxSex = tk.Spinbox(windows, value=('男', '女'))
spinboxSex.grid(row=1, column=1)
lblAge = tk.Label(text='年龄:')
lblAge.grid(row=1, column=2)
spinboxAge = tk.Spinbox(windows, from_=15, to=40)
spinboxAge.grid(row=1, column=3)
# 第3行控件
lblMaj = tk.Label(text='专业:')
lblMaj.grid(row=2, column=0)
entryMaj = tk.Entry()
entryMaj.grid(row=2, column=1)
lblRew = tk.Label(text='奖励:')
lblRew.grid(row=2, column=2)
entryRew = tk.Entry()
entryRew.grid(row=2, column=3)
# 分割线
ttk.Separator(orient=tk.HORIZONTAL).grid(row=3, column=0, columnspan=6, pady=10, sticky=tk.W + tk.E)


# 按钮控件
btnSer = tk.Button(text='查询', command=search)
btnSer.grid(row=4, column=0)
btnIdx = tk.Button(text='插入', command=insert)
btnIdx.grid(row=4, column=1)
btnRep = tk.Button(text='修改', command=alter)
btnRep.grid(row=4, column=2)
btnDel = tk.Button(text='删除', command=delete)
btnDel.grid(row=4, column=3)

windows.mainloop()

  

与数据库实验五:数据库编程相似的内容:

数据库实验五:数据库编程

2、设计一个小型的数据库应用程序  可利用现有的数据库,也可重新设计数据库。  要求实现数据的增加、删除、修改、查询的功能。  在报告中描述清楚使用的数据库、数据表及实现的功能(要求截图,并附 代码) 设计一个小型的数据库应用程序 数据库名:student 表名:infor 字段: Sno:学

Asp-Net-Core开发笔记:EFCore统一实体和属性命名风格

前言 C# 编码规范中,类和属性都是大写驼峰命名风格(PascalCase / UpperCamelCase),而在数据库中我们往往使用小写蛇形命名(snake_case),在默认情况下,EFCore会把原始的类名和属性名直接映射到数据库,这不符合数据库的命名规范。 为了符合命名规范,而且也为了看起

[转帖]Nginx优化与防盗链

目录 一、配置Nginx隐藏版本号1、第一种方法修改配置文件2、第二种方法修改源码文件,重新编译安装 二、修改Nginx用户与组三、配置Nginx网页缓存时间四、实现Nginx的日志分割五、配置Nginx实现连接超时六、更改Nginx运行进程数七、配置Nginx实现网页压缩功能八、配置Nginx防盗

SQL Server实战五:存储过程与触发器

本文介绍基于Microsoft SQL Server软件,实现数据库存储过程与触发器的创建、执行、修改与删除等操作。 目录1 交互式创建并执行——存储过程一2 交互式创建并执行——存储过程二3 用T-SQL创建——存储过程一4 用T-SQL创建——存储过程二5 交互式修改存储过程6 用T-SQL修改

Django更换数据库和迁移数据方案

前言 双十一光顾着买东西都没怎么写文章,现在笔记里还有十几篇半成品文章没写完… 今天来分享一下 Django 项目切换数据库和迁移数据的方案,网络上找到的文章方法不一,且使用中容易遇到各类报错,本文根据 Django 官方文档和工作中的经验,稳定可靠,在博客中长期更新~ 如果你遇到同样的问题,阅读本

华为云GaussDB数据库荣获国际CC EAL4+级别认证

摘要:近日,华为云GaussDB企业级分布式数据库内核正式通过了全球知名独立认证机构欧洲SGS Brightsight实验室的安全评估,获得全球权威信息技术安全性评估标准CC EAL4+级别认证。 本文分享自华为云社区《中国首个,我们拿下了!业界最高级别!华为云GaussDB数据库荣获国际CC EA

Asp-Net-Core开发笔记:快速在已有项目中引入EFCore

前言 很多项目一开始选型的时候没有选择EFCore,不过EFCore确实好用,也许由于种种原因后面还是需要用到,这时候引入EFCore也很方便。 本文以 StarBlog 为例,StarBlog 目前使用的 ORM 是 FreeSQL ,引入 EFCore 对我来说最大的好处是支持多个数据库,如果是

C#移除字符串中的不可见Unicode字符

背景 最近发现某个数据采集的系统拿下来的数据,有些字段的JSON被莫名截断了,导致后续数据分析的时候解析JSON失败。 类似这样 {"title": "你好 或者这样,多了个双引号啥的 {"title":""你好"} 因为数据库是Oracle,起初以为是Oracle这老古董出问题了,结果一番折腾,把

项目小结:使用Docker迁移服务到离线服务器

## 前言 最近遇到的这个场景,需要把之前开发的一套系统迁移到一个离线的服务器上,这个服务器有点麻烦,接入VPN后通过堡垒机才能访问,速度也很慢,遇到不少坑,本文记录一下迁移过程。 ## 基本信息 原本这套系统也挺简单的,Django 写的后端接口,搭配 `Vue+Echarts` 大屏,数据库用

GaussDB拿下的安全认证CC EAL4+究竟有多难?

摘要:近日,经过全球知名独立认证机构SGS Brightsight实验室的安全评估,华为云GaussDB企业级分布式数据库内核获得全球权威信息技术安全性评估标准CC EAL4+级别认证 本文分享自华为云社区《国内唯一!GaussDB拿下的安全认证CC EAL4+究竟有多难?》,作者:GaussDB