做一个简单的数据库

做一个简单的数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import tkinter as tk
from tkinter import messagebox
import pymysql

class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.master.title("学生信息录入")
self.pack()

# 创建标签和文本框
self.name_label = tk.Label(self, text="姓名:")
self.name_label.grid(row=0, column=0)
self.name_entry = tk.Entry(self)
self.name_entry.grid(row=0, column=1)

self.gender_label = tk.Label(self, text="性别:")
self.gender_label.grid(row=1, column=0)
self.gender_entry = tk.Entry(self)
self.gender_entry.grid(row=1, column=1)

self.age_label = tk.Label(self, text="年龄:")
self.age_label.grid(row=2, column=0)
self.age_entry = tk.Entry(self)
self.age_entry.grid(row=2, column=1)

self.grade_label = tk.Label(self, text="成绩:")
self.grade_label.grid(row=3, column=0)
self.grade_entry = tk.Entry(self)
self.grade_entry.grid(row=3, column=1)

# 创建提交按钮
self.submit_button = tk.Button(self, text="提交", command=self.submit_data)
self.submit_button.grid(row=4, column=0, columnspan=1)

# 创建显示数据按钮
self.show_data_button = tk.Button(self, text="显示数据", command=self.show_data)
self.show_data_button.grid(row=4, column=1, columnspan=1)

def submit_data(self):
# 建立数据库连接
conn = pymysql.connect(
host='localhost',
user='roroshen',
password='xxxxxx',
database='miaomiao')

# 定义 SQL 查询语句
sql = "INSERT INTO students (name, gender, age, grade) VALUES (%s, %s, %s, %s)"

# 获取数据库操作游标
cursor = conn.cursor()

# 执行 SQL 查询语句,并提交到数据库
name = self.name_entry.get()
age = self.age_entry.get()
gender = self.gender_entry.get()
grade = self.grade_entry.get()
cursor.execute(sql, (name, gender, age, grade))
conn.commit()

# 关闭数据库连接
cursor.close()
conn.close()
messagebox.showinfo("提交成功", "您的信息已经成功提交!")

# 清空文本框
self.name_entry.delete(0, tk.END)
self.gender_entry.delete(0, tk.END)
self.age_entry.delete(0, tk.END)
self.grade_entry.delete(0, tk.END)

def show_data(self):
# 建立数据库连接
conn = pymysql.connect(
host='localhost',
user='roroshen',
password='xxxxxx',
database='miaomiao')

# 定义 SQL 查询语句
sql = "SELECT * FROM students"

# 获取数据库操作游标
cursor = conn.cursor()

# 执行 SQL 查询语句,并获取结果
cursor.execute(sql)
rows = cursor.fetchall()

# 关闭数据库连接
cursor.close()
conn.close()

# 在新窗口中显示结果
result_window = tk.Toplevel(self)
result_window.title("学生信息")
result_listbox = tk.Listbox(result_window, width=60)
result_listbox.insert(0, "姓名 性别 年龄 成绩")
for row in rows:
result_listbox.insert(tk.END, f"{row[0]} {row[1]} {row[2]} {row[3]}")
result_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

# 创建横向滚动条并将其与Listbox关联
xscrollbar = tk.Scrollbar(result_window, orient=tk.HORIZONTAL)
xscrollbar.pack(side=tk.BOTTOM, fill=tk.X)
result_listbox.config(xscrollcommand=xscrollbar.set)
xscrollbar.config(command=result_listbox.xview)

# 创建主窗口,并启动应用程序
root = tk.Tk()
app = Application(master=root)
app.mainloop()

上面是GPT编写的一个使用MySQL数据库进行数据录入和显示所有数据的小GUI程序。

我们首先登录MySQL服务端,创建一个新的数据库miaomiao,

1
CREATE DATABASE miaomiao;

一个数据库里面会维护很多个二维数据表,他们和Pandas的Dataframe是一样的。用下面的命令来创建一个表,名字叫students,

1
2
3
4
5
6
CREATE TABLE students (
name varchar(10),
gender varchar(10),
age int,
grade varchar(10)
);

MySQL中有三条常用的命令用来显示数据库信息:

  • SHOW: 用于显示数据库或表的信息,如 SHOW DATABASES 用于显示所有数据库列表, SHOW TABLES 用于显示当前数据库中的所有表等。
  • DESCRIBEDESC: 用于显示表的结构信息,包括每个字段的数据类型、是否为 NULL、是否为主键、是否有索引等。
  • SELECT: 用于从表中查询数据,可以通过 WHERE 语句指定筛选条件,通过 ORDER BY 指定排序规则,还可以使用聚合函数进行统计和计算等。

总的来说,SHOWDESCRIBE 是用来获取数据库和表的结构信息的,而 SELECT 是用来查询表中的数据的。SHOW 用于获取比较全局的信息,而 DESCRIBE 则更加细节化,主要用于查看表结构。

cursor叫作数据库游标,假设现实中这样一种情况,我需要在Excel表格中找出符合条件的某些行数据,那这时我会挨行看啊,然后找到某一行了,就复制下来,粘到一个新的文件里。游标的引入就是为了实现这个过程,游标充当指针的作用,从包括多条数据记录的结果集中每次提取一条记录,最终把它们都存储到一个内存区域的虚表之中。然后通过fetchone或者fetchall方法可以获得结果的单行或者多行数据。

这就是一个简单的数据库应用的小例子了。