ubuntu+wxpython+mysql+workbench 学生管理系统

 1/sudo apt-get install mysql-server

(base) ljj@ljj-All-Series:~$ sudo apt-get install mysql-server
[sudo] ljj 的密码: 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会同时安装下列软件:
  libaio1 libcgi-fast-perl libcgi-pm-perl libevent-core-2.1-7
  libevent-pthreads-2.1-7 libfcgi-perl libhtml-template-perl libmecab2
  mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0
  mysql-client-core-8.0 mysql-server-8.0 mysql-server-core-8.0
建议安装:
  libipc-sharedcache-perl mailx tinyca
下列【新】软件包将被安装:
  libaio1 libcgi-fast-perl libcgi-pm-perl libevent-core-2.1-7
  libevent-pthreads-2.1-7 libfcgi-perl libhtml-template-perl libmecab2
  mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0
  mysql-client-core-8.0 mysql-server mysql-server-8.0 mysql-server-core-8.0
升级了 0 个软件包,新安装了 16 个软件包,要卸载 0 个软件包,有 226 个软件包未被升级。
需要下载 31.4 MB 的归档。
解压缩后会消耗 261 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 mysql-client-core-8.0 amd64 8.0.26-0ubuntu0.20.04.3 [4,218 kB]
获取:2 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 mysql-client-8.0 amd64 8.0.26-0ubuntu0.20.04.3 [22.0 kB]
获取:3 http://mirrors.aliyun.com/ubuntu focal/main amd64 libaio1 amd64 0.3.112-5 [7,184 B]
获取:4 http://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-core-2.1-7 amd64 2.1.11-stable-1 [89.1 kB]
获取:5 http://mirrors.aliyun.com/ubuntu focal/main amd64 libevent-pthreads-2.1-7 amd64 2.1.11-stable-1 [7,372 B]
获取:6 http://mirrors.aliyun.com/ubuntu focal/main amd64 libmecab2 amd64 0.996-10build1 [233 kB]
获取:7 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 mysql-server-core-8.0 amd64 8.0.26-0ubuntu0.20.04.3 [18.5 MB]
获取:8 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 mysql-server-8.0 amd64 8.0.26-0ubuntu0.20.04.3 [1,329 kB]
获取:9 http://mirrors.aliyun.com/ubuntu focal/main amd64 libcgi-pm-perl all 4.46-1 [186 kB]
获取:10 http://mirrors.aliyun.com/ubuntu focal/main amd64 libfcgi-perl amd64 0.79-1 [33.1 kB]
获取:11 http://mirrors.aliyun.com/ubuntu focal/main amd64 libcgi-fast-perl all 1:2.15-1 [10.5 kB]
获取:12 http://mirrors.aliyun.com/ubuntu focal/main amd64 libhtml-template-perl all 2.97-1 [59.0 kB]
获取:13 http://mirrors.aliyun.com/ubuntu focal/main amd64 mecab-utils amd64 0.996-10build1 [4,912 B]
获取:14 http://mirrors.aliyun.com/ubuntu focal/main amd64 mecab-ipadic all 2.7.0-20070801+main-2.1 [6,714 kB]
获取:15 http://mirrors.aliyun.com/ubuntu focal/main amd64 mecab-ipadic-utf8 all 2.7.0-20070801+main-2.1 [4,380 B]
获取:16 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 mysql-server all 8.0.26-0ubuntu0.20.04.3 [9,536 B]
已下载 31.4 MB,耗时 4秒 (7,231 kB/s)
正在预设定软件包 ...
正在选中未选择的软件包 mysql-client-core-8.0。
(正在读取数据库 ... 系统当前共安装有 207033 个文件和目录。)
准备解压 .../00-mysql-client-core-8.0_8.0.26-0ubuntu0.20.04.3_amd64.deb  ...
正在解压 mysql-client-core-8.0 (8.0.26-0ubuntu0.20.04.3) ...
正在选中未选择的软件包 mysql-client-8.0。
准备解压 .../01-mysql-client-8.0_8.0.26-0ubuntu0.20.04.3_amd64.deb  ...
正在解压 mysql-client-8.0 (8.0.26-0ubuntu0.20.04.3) ...
正在选中未选择的软件包 libaio1:amd64。
准备解压 .../02-libaio1_0.3.112-5_amd64.deb  ...
正在解压 libaio1:amd64 (0.3.112-5) ...
正在选中未选择的软件包 libevent-core-2.1-7:amd64。
准备解压 .../03-libevent-core-2.1-7_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-core-2.1-7:amd64 (2.1.11-stable-1) ...
正在选中未选择的软件包 libevent-pthreads-2.1-7:amd64。
准备解压 .../04-libevent-pthreads-2.1-7_2.1.11-stable-1_amd64.deb  ...
正在解压 libevent-pthreads-2.1-7:amd64 (2.1.11-stable-1) ...
正在选中未选择的软件包 libmecab2:amd64。
准备解压 .../05-libmecab2_0.996-10build1_amd64.deb  ...
正在解压 libmecab2:amd64 (0.996-10build1) ...
正在选中未选择的软件包 mysql-server-core-8.0。
准备解压 .../06-mysql-server-core-8.0_8.0.26-0ubuntu0.20.04.3_amd64.deb  ...
正在解压 mysql-server-core-8.0 (8.0.26-0ubuntu0.20.04.3) ...
正在选中未选择的软件包 mysql-server-8.0。
准备解压 .../07-mysql-server-8.0_8.0.26-0ubuntu0.20.04.3_amd64.deb  ...
正在解压 mysql-server-8.0 (8.0.26-0ubuntu0.20.04.3) ...
正在选中未选择的软件包 libcgi-pm-perl。
准备解压 .../08-libcgi-pm-perl_4.46-1_all.deb  ...
正在解压 libcgi-pm-perl (4.46-1) ...
正在选中未选择的软件包 libfcgi-perl。
准备解压 .../09-libfcgi-perl_0.79-1_amd64.deb  ...
正在解压 libfcgi-perl (0.79-1) ...
正在选中未选择的软件包 libcgi-fast-perl。
准备解压 .../10-libcgi-fast-perl_1%3a2.15-1_all.deb  ...
正在解压 libcgi-fast-perl (1:2.15-1) ...
正在选中未选择的软件包 libhtml-template-perl。
准备解压 .../11-libhtml-template-perl_2.97-1_all.deb  ...
正在解压 libhtml-template-perl (2.97-1) ...
正在选中未选择的软件包 mecab-utils。
准备解压 .../12-mecab-utils_0.996-10build1_amd64.deb  ...
正在解压 mecab-utils (0.996-10build1) ...
正在选中未选择的软件包 mecab-ipadic。
准备解压 .../13-mecab-ipadic_2.7.0-20070801+main-2.1_all.deb  ...
正在解压 mecab-ipadic (2.7.0-20070801+main-2.1) ...
正在选中未选择的软件包 mecab-ipadic-utf8。
准备解压 .../14-mecab-ipadic-utf8_2.7.0-20070801+main-2.1_all.deb  ...
正在解压 mecab-ipadic-utf8 (2.7.0-20070801+main-2.1) ...
正在选中未选择的软件包 mysql-server。
准备解压 .../15-mysql-server_8.0.26-0ubuntu0.20.04.3_all.deb  ...
正在解压 mysql-server (8.0.26-0ubuntu0.20.04.3) ...
正在设置 libmecab2:amd64 (0.996-10build1) ...
正在设置 mysql-client-core-8.0 (8.0.26-0ubuntu0.20.04.3) ...
正在设置 libcgi-pm-perl (4.46-1) ...
正在设置 libhtml-template-perl (2.97-1) ...
正在设置 mecab-utils (0.996-10build1) ...
正在设置 libevent-core-2.1-7:amd64 (2.1.11-stable-1) ...
正在设置 mysql-client-8.0 (8.0.26-0ubuntu0.20.04.3) ...
正在设置 libfcgi-perl (0.79-1) ...
正在设置 libaio1:amd64 (0.3.112-5) ...
正在设置 libevent-pthreads-2.1-7:amd64 (2.1.11-stable-1) ...
正在设置 mecab-ipadic (2.7.0-20070801+main-2.1) ...
Compiling IPA dictionary for Mecab.  This takes long time...
reading /usr/share/mecab/dic/ipadic/unk.def ... 40
emitting double-array: 100% |###########################################| 
/usr/share/mecab/dic/ipadic/model.def is not found. skipped.
reading /usr/share/mecab/dic/ipadic/Others.csv ... 2
reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999
reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393
reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328
reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252
reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328
reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750
reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91
reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795
reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42
reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210
reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146
reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19
reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135
reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151
reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120
reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221
reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42
reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202
reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477
reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146
reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171
reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199
reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668
reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208
reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032
emitting double-array: 100% |###########################################| 
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix      : 100% |###########################################| 

done!
update-alternatives: 使用 /var/lib/mecab/dic/ipadic 来在自动模式中提供 /var/lib/mecab/dic/debian (mecab-dictionary)
正在设置 libcgi-fast-perl (1:2.15-1) ...
正在设置 mysql-server-core-8.0 (8.0.26-0ubuntu0.20.04.3) ...
正在设置 mecab-ipadic-utf8 (2.7.0-20070801+main-2.1) ...
Compiling IPA dictionary for Mecab.  This takes long time...
reading /usr/share/mecab/dic/ipadic/unk.def ... 40
emitting double-array: 100% |###########################################| 
/usr/share/mecab/dic/ipadic/model.def is not found. skipped.
reading /usr/share/mecab/dic/ipadic/Others.csv ... 2
reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999
reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393
reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328
reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252
reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328
reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750
reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91
reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795
reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42
reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210
reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146
reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19
reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135
reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151
reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120
reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221
reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42
reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202
reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477
reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146
reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171
reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199
reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668
reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208
reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032
emitting double-array: 100% |###########################################| 
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix      : 100% |###########################################| 

done!
update-alternatives: 使用 /var/lib/mecab/dic/ipadic-utf8 来在自动模式中提供 /var/lib/mecab/dic/debian (mecab-dictionary)
正在设置 mysql-server-8.0 (8.0.26-0ubuntu0.20.04.3) ...
update-alternatives: 使用 /etc/mysql/mysql.cnf 来在自动模式中提供 /etc/mysql/my.cnf (my.cnf)
Renaming removed key_buffer and myisam-recover options (if present)
mysqld will log errors to /var/log/mysql/error.log
mysqld is running as pid 97983
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.
正在设置 mysql-server (8.0.26-0ubuntu0.20.04.3) ...
正在处理用于 systemd (245.4-4ubuntu3.11) 的触发器 ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...
正在处理用于 libc-bin (2.31-0ubuntu9.2) 的触发器 ...

2/sudo apt-get install mysql-client

(base) ljj@ljj-All-Series:~$ sudo apt-get install mysql-client
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列【新】软件包将被安装:
  mysql-client
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 226 个软件包未被升级。
需要下载 9,416 B 的归档。
解压缩后会消耗 113 kB 的额外空间。
获取:1 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 mysql-client all 8.0.26-0ubuntu0.20.04.3 [9,416 B]
已下载 9,416 B,耗时 0秒 (50.3 kB/s)    
正在选中未选择的软件包 mysql-client。
(正在读取数据库 ... 系统当前共安装有 207404 个文件和目录。)
准备解压 .../mysql-client_8.0.26-0ubuntu0.20.04.3_all.deb  ...
正在解压 mysql-client (8.0.26-0ubuntu0.20.04.3) ...
正在设置 mysql-client (8.0.26-0ubuntu0.20.04.3) ...

3/sudo apt-get install libmysqlclient-dev

(base) ljj@ljj-All-Series:~$ sudo apt-get install libmysqlclient-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
将会同时安装下列软件:
  libmysqlclient21 libssl-dev
建议安装:
  libssl-doc
下列【新】软件包将被安装:
  libmysqlclient-dev libssl-dev
下列软件包将被升级:
  libmysqlclient21
升级了 1 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 225 个软件包未被升级。
需要下载 4,348 kB 的归档。
解压缩后会消耗 17.8 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libmysqlclient21 amd64 8.0.26-0ubuntu0.20.04.3 [1,227 kB]
获取:2 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libssl-dev amd64 1.1.1f-1ubuntu2.8 [1,584 kB]
获取:3 http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 libmysqlclient-dev amd64 8.0.26-0ubuntu0.20.04.3 [1,537 kB]
已下载 4,348 kB,耗时 1秒 (6,646 kB/s)        
(正在读取数据库 ... 系统当前共安装有 207408 个文件和目录。)
准备解压 .../libmysqlclient21_8.0.26-0ubuntu0.20.04.3_amd64.deb  ...
正在解压 libmysqlclient21:amd64 (8.0.26-0ubuntu0.20.04.3) 并覆盖 (8.0.26-0ubuntu0.20.04.2) ...
正在选中未选择的软件包 libssl-dev:amd64。
准备解压 .../libssl-dev_1.1.1f-1ubuntu2.8_amd64.deb  ...
正在解压 libssl-dev:amd64 (1.1.1f-1ubuntu2.8) ...
正在选中未选择的软件包 libmysqlclient-dev。
准备解压 .../libmysqlclient-dev_8.0.26-0ubuntu0.20.04.3_amd64.deb  ...
正在解压 libmysqlclient-dev (8.0.26-0ubuntu0.20.04.3) ...
正在设置 libmysqlclient21:amd64 (8.0.26-0ubuntu0.20.04.3) ...
正在设置 libssl-dev:amd64 (1.1.1f-1ubuntu2.8) ...
正在设置 libmysqlclient-dev (8.0.26-0ubuntu0.20.04.3) ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...
正在处理用于 libc-bin (2.31-0ubuntu9.2) 的触发器 ...

4/sudo apt-get install net-tools

(base) ljj@ljj-All-Series:~$ sudo apt-get install net-tools
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列【新】软件包将被安装:
  net-tools
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 225 个软件包未被升级。
需要下载 196 kB 的归档。
解压缩后会消耗 864 kB 的额外空间。
获取:1 http://mirrors.aliyun.com/ubuntu focal/main amd64 net-tools amd64 1.60+git20180626.aebd88e-1ubuntu1 [196 kB]
已下载 196 kB,耗时 0秒 (1,263 kB/s)
正在选中未选择的软件包 net-tools。
(正在读取数据库 ... 系统当前共安装有 207555 个文件和目录。)
准备解压 .../net-tools_1.60+git20180626.aebd88e-1ubuntu1_amd64.deb  ...
正在解压 net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...
正在设置 net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...

5/

(base) ljj@ljj-All-Series:~$ sudo netstat -tap | grep mysql
tcp        0      0 localhost:33060         0.0.0.0:*               LISTEN      98200/mysqld        
tcp        0      0 localhost:mysql         0.0.0.0:*               LISTEN      98200/mysqld  

6/初始密码:回车

(base) ljj@ljj-All-Series:~$ sudo mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.26-0ubuntu0.20.04.3 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

7/workbench安装

(base) ljj@ljj-All-Series:~/下载$ sudo dpkg -i mysql-workbench-community_8.0.20-1ubuntu20.04_amd64.deb 
dpkg: 警告: 即将把 mysql-workbench-community 从 8.0.27-1ubuntu21.04 降级到 8.0.20-1ubuntu20.04
(正在读取数据库 ... 系统当前共安装有 208889 个文件和目录。)
准备解压 mysql-workbench-community_8.0.20-1ubuntu20.04_amd64.deb  ...
正在解压 mysql-workbench-community (8.0.20-1ubuntu20.04) 并覆盖 (8.0.27-1ubuntu21.04) ...
dpkg: 依赖关系问题使得 mysql-workbench-community 的配置工作不能继续:
 mysql-workbench-community 依赖于 libpython2.7 (>= 2.7);然而:
  未安装软件包 libpython2.7。
 mysql-workbench-community 依赖于 libzip5 (>= 0.10);然而:
  未安装软件包 libzip5。

dpkg: 处理软件包 mysql-workbench-community (--install)时出错:
 依赖关系问题 - 仍未被配置
正在处理用于 gnome-menus (3.36.0-1ubuntu1) 的触发器 ...
正在处理用于 desktop-file-utils (0.24-1ubuntu3) 的触发器 ...
正在处理用于 mime-support (3.64ubuntu1) 的触发器 ...
正在处理用于 hicolor-icon-theme (0.17-2) 的触发器 ...
正在处理用于 shared-mime-info (1.15-1) 的触发器 ...
在处理时有错误发生:
 mysql-workbench-community
(base) ljj@ljj-All-Series:~/下载$ sudo apt-get -f install
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
正在修复依赖关系... 完成
将会同时安装下列软件:
  libpython2.7 libzip5
下列【新】软件包将被安装:
  libpython2.7 libzip5
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 225 个软件包未被升级。
有 1 个软件包没有被完全安装或卸载。
需要下载 1,084 kB 的归档。
解压缩后会消耗 3,645 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 libpython2.7 amd64 2.7.18-1~20.04.1 [1,038 kB]
获取:2 http://mirrors.aliyun.com/ubuntu focal/universe amd64 libzip5 amd64 1.5.1-0ubuntu1 [46.7 kB]
已下载 1,084 kB,耗时 0秒 (4,258 kB/s)
正在选中未选择的软件包 libpython2.7:amd64。
(正在读取数据库 ... 系统当前共安装有 208894 个文件和目录。)
准备解压 .../libpython2.7_2.7.18-1~20.04.1_amd64.deb  ...
正在解压 libpython2.7:amd64 (2.7.18-1~20.04.1) ...
正在选中未选择的软件包 libzip5:amd64。
准备解压 .../libzip5_1.5.1-0ubuntu1_amd64.deb  ...
正在解压 libzip5:amd64 (1.5.1-0ubuntu1) ...
正在设置 libpython2.7:amd64 (2.7.18-1~20.04.1) ...
正在设置 libzip5:amd64 (1.5.1-0ubuntu1) ...
正在设置 mysql-workbench-community (8.0.20-1ubuntu20.04) ...
正在处理用于 libc-bin (2.31-0ubuntu9.2) 的触发器 ...
(base) ljj@ljj-All-Series:~/下载$ sudo dpkg -i mysql-workbench-community_8.0.20-1ubuntu20.04_amd64.deb 
(正在读取数据库 ... 系统当前共安装有 208906 个文件和目录。)
准备解压 mysql-workbench-community_8.0.20-1ubuntu20.04_amd64.deb  ...
正在解压 mysql-workbench-community (8.0.20-1ubuntu20.04) 并覆盖 (8.0.20-1ubuntu20.04) ...
正在设置 mysql-workbench-community (8.0.20-1ubuntu20.04) ...
正在处理用于 gnome-menus (3.36.0-1ubuntu1) 的触发器 ...
正在处理用于 desktop-file-utils (0.24-1ubuntu3) 的触发器 ...
正在处理用于 mime-support (3.64ubuntu1) 的触发器 ...
正在处理用于 hicolor-icon-theme (0.17-2) 的触发器 ...
正在处理用于 shared-mime-info (1.15-1) 的触发器 ...

8/workbench创建数据库

wxpython+MySQL实现学生信息管理系统_momobaba2018的博客-CSDN博客

-- MySQL dump 10.16  Distrib 10.1.35-MariaDB, for Win32 (AMD64)
--
-- Host: localhost    Database: login_users
-- ------------------------------------------------------
-- Server version	10.1.35-MariaDB

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `login_users`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `login_users` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `login_users`;

--
-- Table structure for table `stu_info`
--

DROP TABLE IF EXISTS `stu_info`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stu_info` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '学生id',
  `stu_name` varchar(32) NOT NULL COMMENT '姓名',
  `stu_gender` enum('男','女') NOT NULL COMMENT '性别',
  `stu_age` tinyint(3) unsigned NOT NULL COMMENT '年龄',
  `stu_cid` varchar(32) NOT NULL COMMENT 'CSDN账号',
  `stu_classid` varchar(32) NOT NULL COMMENT '学习课程',
  `stu_phone` varchar(32) NOT NULL COMMENT '联系方式',
  PRIMARY KEY (`id`),
  UNIQUE KEY `stu_name` (`stu_name`),
  UNIQUE KEY `stu_cid` (`stu_cid`),
  UNIQUE KEY `stu_phone` (`stu_phone`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `stu_info`
--

LOCK TABLES `stu_info` WRITE;
/*!40000 ALTER TABLE `stu_info` DISABLE KEYS */;
INSERT INTO `stu_info` VALUES (1,'测试姓名1','男',20,'000001','Python01','测试联系方式1'),(2,'测试姓名2','男',23,'000002','Python02','测试联系方式2'),(3,'测试姓名3','女',21,'000003','Python03','测试联系方式3'),(4,'测试姓名4','男',28,'000004','php01','测试联系方式4'),(5,'测试姓名5','男',30,'000005','php02','测试联系方式5'),(6,'测试姓名6','女',25,'000006','php03','测试联系方式6'),(7,'测试姓名7','男',35,'000007','JavaScript01','测试联系方式7'),(8,'测试姓名8','男',31,'000008','JavaScript02','测试联系方式8'),(9,'测试姓名9','女',26,'000009','JavaScript03','测试联系方式9'),(10,'测试姓名10','男',24,'000010','SQL01','测试联系方式10');
/*!40000 ALTER TABLE `stu_info` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `users`
--

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_name` varchar(32) NOT NULL COMMENT '用户名',
  `user_password` varchar(23) NOT NULL COMMENT '登录密码',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_name` (`user_name`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `users`
--

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'admin','Python09'),(2,'momobaba','123456');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2018-09-17 21:29:53

9/my.py

#导入mx模块
import wx
import wx.grid
from mydb import Sql_operation
#创建CSDN学生信息管理系统登录界面类
class UserLogin(wx.Frame):
	'''
	登录界面
	'''
	#初始化登录界面
	def __init__(self,*args,**kw):
		# ensure the parent's __init__ is called
		super(UserLogin,self).__init__(*args, **kw)
		#设置窗口屏幕居中
		self.Center()
		#创建窗口
		self.pnl = wx.Panel(self)
		#调用登录界面函数
		self.LoginInterface()

	def LoginInterface(self):
		#创建垂直方向box布局管理器
		vbox = wx.BoxSizer(wx.VERTICAL)
		#################################################################################
		#创建logo静态文本,设置字体属性
		logo = wx.StaticText(self.pnl,label="CSDN学生信息管理系统")
		font = logo.GetFont()
		font.PointSize += 30
		font = font.Bold()
		logo.SetFont(font)
		#添加logo静态文本到vbox布局管理器
		vbox.Add(logo,proportion=0,flag=wx.FIXED_MINSIZE | wx.TOP | wx.CENTER,border=180)
		#################################################################################
		#创建静态框
		sb_username = wx.StaticBox(self.pnl,label="用户名")
		sb_password = wx.StaticBox(self.pnl,label="密  码")		
		#创建水平方向box布局管理器
		hsbox_username = wx.StaticBoxSizer(sb_username,wx.HORIZONTAL)
		hsbox_password = wx.StaticBoxSizer(sb_password,wx.HORIZONTAL)
		#创建用户名、密码输入框
		self.user_name = wx.TextCtrl(self.pnl,size=(210,25))
		self.user_password = wx.TextCtrl(self.pnl,size=(210,25))
		#添加用户名和密码输入框到hsbox布局管理器
		hsbox_username.Add(self.user_name,0,wx.EXPAND | wx.BOTTOM,5)
		hsbox_password.Add(self.user_password,0,wx.EXPAND | wx.BOTTOM,5)
		#将水平box添加到垂直box
		vbox.Add(hsbox_username,proportion=0,flag=wx.CENTER)
		vbox.Add(hsbox_password,proportion=0,flag=wx.CENTER)
		#################################################################################
		#创建水平方向box布局管理器
		hbox = wx.BoxSizer()
		#创建登录按钮、绑定事件处理
		login_button = wx.Button(self.pnl,label="登录",size=(80,25))
		login_button.Bind(wx.EVT_BUTTON,self.LoginButton)
		#添加登录按钮到hbox布局管理器
		hbox.Add(login_button,0,flag=wx.EXPAND | wx.TOP,border=5)
		#将水平box添加到垂直box
		vbox.Add(hbox,proportion=0,flag=wx.CENTER)
		#################################################################################
		#设置面板的布局管理器vbox		
		self.pnl.SetSizer(vbox)		

	def LoginButton(self,event):
		#连接login_users数据库
		op = Sql_operation("login_users")
		#获取users表中的用户名和密码信息,返回为二维元组
		np = op.FindAll("users")
		#匹配标记
		login_sign = 0
		#匹配用户名和密码
		for i in np:
			if (i[1] == self.user_name.GetValue()) and (i[2] == self.user_password.GetValue()):
				login_sign = 1
				break
		if login_sign == 0:
			print("用户名或密码错误!")
		elif login_sign == 1:
			print("登录成功!")			
			operation = UserOperation(None,title="CSDN学生信息管理系统",size=(1024,668))
			operation.Show()
			self.Close(True)


class UserOperation(wx.Frame):
	'''
	操作界面
	'''
	def __init__(self,*args,**kw):
		# ensure the parent's __init__ is called
		super(UserOperation,self).__init__(*args, **kw)
		#设置窗口屏幕居中
		self.Center()
		#创建窗口
		self.pnl = wx.Panel(self)
		#调用操作界面函数
		self.OperationInterface()

	def OperationInterface(self):
		#创建垂直方向box布局管理器
		self.vbox = wx.BoxSizer(wx.VERTICAL)		
		#################################################################################
		#创建logo静态文本,设置字体属性
		logo = wx.StaticText(self.pnl,label="CSDN学生信息管理系统")
		font = logo.GetFont()
		font.PointSize += 30
		font = font.Bold()
		logo.SetFont(font)
		#添加logo静态文本到vbox布局管理器
		self.vbox.Add(logo,proportion=0,flag=wx.FIXED_MINSIZE | wx.TOP | wx.CENTER,border=5)
		#################################################################################
		#创建静态框
		sb_button = wx.StaticBox(self.pnl,label="选择操作")
		#创建垂直方向box布局管理器
		vsbox_button = wx.StaticBoxSizer(sb_button,wx.VERTICAL)
		#创建操作按钮、绑定事件处理
		check_button = wx.Button(self.pnl,id=10,label="查看学生信息",size=(150,50))
		add_button = wx.Button(self.pnl,id=11,label="添加学生信息",size=(150,50))
		delete_button = wx.Button(self.pnl,id=12,label="删除学生信息",size=(150,50))
		quit_button = wx.Button(self.pnl,id=13,label="退出系统",size=(150,50))
		self.Bind(wx.EVT_BUTTON,self.ClickButton,id=10,id2=13)
		#添加操作按钮到vsbox布局管理器
		vsbox_button.Add(check_button,0,wx.EXPAND | wx.BOTTOM,40)
		vsbox_button.Add(add_button,0,wx.EXPAND | wx.BOTTOM,40)
		vsbox_button.Add(delete_button,0,wx.EXPAND | wx.BOTTOM,40)
		vsbox_button.Add(quit_button,0,wx.EXPAND | wx.BOTTOM,200)		
		#创建静态框
		sb_show_operation = wx.StaticBox(self.pnl,label="显示/操作窗口",size=(800,500))
		#创建垂直方向box布局管理器
		self.vsbox_show_operation = wx.StaticBoxSizer(sb_show_operation,wx.VERTICAL)
		#创建水平方向box布局管理器
		hbox = wx.BoxSizer()
		hbox.Add(vsbox_button,0,wx.EXPAND | wx.BOTTOM,5)
		hbox.Add(self.vsbox_show_operation,0,wx.EXPAND | wx.BOTTOM,5)
		#将hbox添加到垂直box		
		self.vbox.Add(hbox,proportion=0,flag=wx.CENTER)		
		#################################################################################
		self.pnl.SetSizer(self.vbox)

	def ClickButton(self,event):
		source_id = event.GetId()
		if source_id == 10:
			print("查询操作!")
			inquire_button = InquireOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			inquire_button.Show()
			self.Close(True)			
		elif source_id == 11:
			print("添加操作!")
			add_button = AddOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			add_button.Show()
			self.Close(True)						
		elif source_id == 12:
			print("删除操作!")
			del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			del_button.Show()
			self.Close(True)			
		elif source_id == 13:
			self.Close(True)

#继承UserOperation类,实现初始化操作界面
class InquireOp(UserOperation):
	def __init__(self,*args,**kw):
		# ensure the parent's __init__ is called
		super(InquireOp,self).__init__(*args, **kw)
		#创建学生信息网格		
		self.stu_grid = self.CreateGrid()			
		self.stu_grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK,self.OnLabelleftClick)
		#添加到vsbox_show_operation布局管理器
		self.vsbox_show_operation.Add(self.stu_grid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,30)		

	def ClickButton(self,event):
		source_id = event.GetId()
		if source_id == 10:
			pass						
		elif source_id == 11:
			print("添加操作!")
			add_button = AddOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			add_button.Show()
			self.Close(True)						
		elif source_id == 12:
			print("删除操作!")
			del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			del_button.Show()
			self.Close(True)			
		elif source_id == 13:
			self.Close(True)

	def CreateGrid(self):
		#连接login_users数据库
		op = Sql_operation("login_users")
		#获取stu_information表中的学生信息,返回为二维元组
		np = op.FindAll("stu_info")
		column_names = ("姓名","性别","年龄","CSDN账号","学习课程","联系方式")
		stu_grid = wx.grid.Grid(self.pnl)
		stu_grid.CreateGrid(len(np),len(np[0])-1)
		for row in range(len(np)):
			stu_grid.SetRowLabelValue(row,str(np[row][0]))#确保网格序列号与数据库id保持一致
			for col in range(1,len(np[row])):
				stu_grid.SetColLabelValue(col-1,column_names[col-1])				
				stu_grid.SetCellValue(row,col-1,str(np[row][col]))				
		stu_grid.AutoSize()
		return stu_grid

	def OnLabelleftClick(self,event):
		#连接login_users数据库
		op = Sql_operation("login_users")
		#获取users表中的用户名和密码信息,返回为二维元组
		np = op.FindAll("stu_info")
		print("RowIdx: {0}".format(event.GetRow()))
		print("ColIdx: {0}".format(event.GetRow()))
		print(np[event.GetRow()])
		event.Skip()

#继承UserOperation类,实现初始化操作界面
class AddOp(UserOperation):
	def __init__(self,*args,**kw):
		# ensure the parent's __init__ is called
		super(AddOp,self).__init__(*args, **kw)
		#创建添加学生信息输入框、添加按钮
		self.stu_name = wx.TextCtrl(self.pnl,size = (210,25))
		self.stu_gender = wx.TextCtrl(self.pnl,size = (210,25))
		self.stu_age = wx.TextCtrl(self.pnl,size = (210,25))
		self.stu_cid = wx.TextCtrl(self.pnl,size = (210,25))
		self.stu_classid = wx.TextCtrl(self.pnl,size = (210,25))
		self.stu_phone = wx.TextCtrl(self.pnl,size = (210,25))
		self.add_affirm = wx.Button(self.pnl,label="添加",size=(80,25))
		#为添加按钮组件绑定事件处理
		self.add_affirm.Bind(wx.EVT_BUTTON,self.AddAffirm)
		#################################################################################
		#创建静态框
		sb_name = wx.StaticBox(self.pnl,label="姓  名")
		sb_gender = wx.StaticBox(self.pnl,label="性  别")
		sb_age = wx.StaticBox(self.pnl,label="年  龄")
		sb_cid = wx.StaticBox(self.pnl,label="CSDN号")
		sb_classid = wx.StaticBox(self.pnl,label="学习课程")
		sb_phone = wx.StaticBox(self.pnl,label="联系方式")		
		#创建水平方向box布局管理器
		hsbox_name = wx.StaticBoxSizer(sb_name,wx.HORIZONTAL)
		hsbox_gender = wx.StaticBoxSizer(sb_gender,wx.HORIZONTAL)
		hsbox_age = wx.StaticBoxSizer(sb_age,wx.HORIZONTAL)
		hsbox_cid = wx.StaticBoxSizer(sb_cid,wx.HORIZONTAL)
		hsbox_classid = wx.StaticBoxSizer(sb_classid,wx.HORIZONTAL)
		hsbox_phone = wx.StaticBoxSizer(sb_phone,wx.HORIZONTAL)
		#添加到hsbox布局管理器
		hsbox_name.Add(self.stu_name,0,wx.EXPAND | wx.BOTTOM,5)
		hsbox_gender.Add(self.stu_gender,0,wx.EXPAND | wx.BOTTOM,5)
		hsbox_age.Add(self.stu_age,0,wx.EXPAND | wx.BOTTOM,5)
		hsbox_cid.Add(self.stu_cid,0,wx.EXPAND | wx.BOTTOM,5)
		hsbox_classid.Add(self.stu_classid,0,wx.EXPAND | wx.BOTTOM,5)
		hsbox_phone.Add(self.stu_phone,0,wx.EXPAND | wx.BOTTOM,5)
		#################################################################################
		#添加到vsbox_show_operation布局管理器
		self.vsbox_show_operation.Add(hsbox_name,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)
		self.vsbox_show_operation.Add(hsbox_gender,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)
		self.vsbox_show_operation.Add(hsbox_age,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)
		self.vsbox_show_operation.Add(hsbox_cid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)
		self.vsbox_show_operation.Add(hsbox_classid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)
		self.vsbox_show_operation.Add(hsbox_phone,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)
		self.vsbox_show_operation.Add(self.add_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)

	def ClickButton(self,event):
		source_id = event.GetId()
		if source_id == 10:
			print("查询操作!")
			inquire_button = InquireOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			inquire_button.Show()
			self.Close(True)			
		elif source_id == 11:
			pass						
		elif source_id == 12:
			print("删除操作!")
			del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			del_button.Show()
			self.Close(True)			
		elif source_id == 13:
			self.Close(True)

	def AddAffirm(self,event):
		#连接login_users数据库
		op = Sql_operation("login_users")
		#向stu_information表添加学生信息
		stu_name = self.stu_name.GetValue()
		print(stu_name)
		stu_gender = self.stu_gender.GetValue()
		print(stu_gender)
		stu_age = self.stu_age.GetValue()
		print(stu_age)
		stu_cid = self.stu_cid.GetValue()
		print(stu_cid)		
		stu_classid = self.stu_classid.GetValue()
		print(stu_classid)
		stu_phone = self.stu_phone.GetValue()
		print(stu_phone)
		np = op.Insert(stu_name,stu_gender,stu_age,stu_cid,stu_classid,stu_phone)

#继承InquireOp类,实现初始化操作界面
class DelOp(InquireOp):
	def __init__(self,*args,**kw):
		# ensure the parent's __init__ is called
		super(DelOp,self).__init__(*args, **kw)
		#创建删除学员信息输入框、删除按钮
		self.del_id = wx.TextCtrl(self.pnl,pos = (407,78),size = (210,25))
		self.del_affirm = wx.Button(self.pnl,label="删除",pos=(625,78),size=(80,25))
		#为删除按钮组件绑定事件处理
		self.del_affirm.Bind(wx.EVT_BUTTON,self.DelAffirm)
		#################################################################################
		#创建静态框
		sb_del = wx.StaticBox(self.pnl,label="请选择需要删除的学生id")
		#创建水平方向box布局管理器
		hsbox_del = wx.StaticBoxSizer(sb_del,wx.HORIZONTAL)
		#添加到hsbox_name布局管理器
		hsbox_del.Add(self.del_id,0,wx.EXPAND | wx.BOTTOM,5)
		#添加到vsbox_show_operation布局管理器
		self.vsbox_show_operation.Add(hsbox_del,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)
		self.vsbox_show_operation.Add(self.del_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)

	def ClickButton(self,event):
		source_id = event.GetId()
		if source_id == 10:
			print("查询操作!")
			inquire_button = InquireOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			inquire_button.Show()
			self.Close(True)			
		elif source_id == 11:
			print("添加操作!")
			add_button = AddOp(None,title="CSDN学生信息管理系统",size=(1024,668))
			add_button.Show()
			self.Close(True)						
		elif source_id == 12:
			pass		
		elif source_id == 13:
			self.Close(True)

	def DelAffirm(self,event):
		#连接login_users数据库
		op = Sql_operation("login_users")
		#向stu_information表添加学生信息
		del_id = self.del_id.GetValue()
		print(del_id)
		np = op.Del(int(del_id))
		
		del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))
		del_button.Show()
		self.Close(True)

if __name__ == '__main__':
	app = wx.App()
	login = UserLogin(None,title="CSDN学生信息管理系统",size=(1024,668))
	login.Show()
	app.MainLoop()

mydb.py

#导入pymysql模块
import pymysql

#创建数据库操作类
class Sql_operation(object):
	'''
	数据库操作
	'''
	#用构造函数实现数据库连接,并引入mydb参数,实现调用不同的数据库
	def __init__(self,mydb): 
		#实例变量
		self.mydb = mydb
		#打开数据库连接
		self.db = pymysql.connect(host = "localhost",user = "root",password = "123456",db = self.mydb,charset = "utf8")
		#创建游标对象
		self.cursor = self.db.cursor()
		
	#定义查看数据表信息函数,并引入table_field、table_name参数,实现查看不同数据表的建表语句
	def FindAll(self,table_name):
		#实例变量
		self.table_name = table_name
		#定义SQL语句
		sql = "select * from %s"%(self.table_name)
		try:
			#执行数据库操作
			self.cursor.execute(sql)
			#处理结果
			data = self.cursor.fetchall()
			return data			
		except Exception as err:
			print("SQL执行错误,原因:",err)

	#定义添加表数据函数
	def Insert(self,stu_name,stu_gender,stu_age,stu_cid,stu_classid,stu_phone):
		#实例变量
		self.stu_name = stu_name
		self.stu_gender = stu_gender
		self.stu_age = stu_age
		self.stu_cid = stu_cid
		self.stu_classid = stu_classid
		self.stu_phone = stu_phone
		#定义SQL语句
		sql = "insert into stu_info(stu_name,stu_gender,stu_age,stu_cid,stu_classid,stu_phone) values('%s','%s','%s','%s','%s','%s')"%(self.stu_name,self.stu_gender,self.stu_age,self.stu_cid,self.stu_classid,self.stu_phone)
		try:
			#执行数据库操作
			self.cursor.execute(sql)
			#事务提交
			self.db.commit()
		except Exception as err:
			#事务回滚
			self.db.rollback()
			print("SQL执行错误,原因:",err)

	#定义删除表数据函数
	def Del(self,stu_id):
		#实例变量
		self.stu_id = stu_id		
		#定义SQL语句
		sql = "delete from stu_info where id=%d"%(self.stu_id)
		try:
			#执行数据库操作
			self.cursor.execute(sql)
			#事务提交
			self.db.commit()
		except Exception as err:
			#事务回滚
			self.db.rollback()
			print("SQL执行错误,原因:",err)
	
	#用析构函数实现数据库关闭
	def __del__(self):
		#关闭数据库连接
		self.db.close()

10

1/安装依赖包
sudo apt-get install git curl libsdl2-mixer-2.0-0 libsdl2-image-2.0-0 libsdl2-2.0-0 libpng12.so.0
sudo cp libpng12.so.0  /usr/lib/x86_64-linux-gnu/
pip install pymysql
pip install wxPython-4.1.1-cp38-cp38-linux_x86_64.whl
2/sudo python my.py

11/命令行查询数据库


mysql> use login_users;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show databases; 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| login_users        |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use login_users 
Database changed

mysql> show tables;
+-----------------------+
| Tables_in_login_users |
+-----------------------+
| stu_info              |
| users                 |
+-----------------------+
2 rows in set (0.01 sec)

mysql> show st
status                stu_info              stu_info.stu_gender  
stu_age               stu_info.id           stu_info.stu_name    
stu_cid               stu_info.stu_age      stu_info.stu_phone   
stu_classid           stu_info.stu_cid      stu_name             
stu_gender            stu_info.stu_classid  stu_phone   

mysql> desc stu_info;
+-------------+-------------------+------+-----+---------+----------------+
| Field       | Type              | Null | Key | Default | Extra          |
+-------------+-------------------+------+-----+---------+----------------+
| id          | int unsigned      | NO   | PRI | NULL    | auto_increment |
| stu_name    | varchar(32)       | NO   | UNI | NULL    |                |
| stu_gender  | enum('男','女')   | NO   |     | NULL    |                |
| stu_age     | tinyint unsigned  | NO   |     | NULL    |                |
| stu_cid     | varchar(32)       | NO   | UNI | NULL    |                |
| stu_classid | varchar(32)       | NO   |     | NULL    |                |
| stu_phone   | varchar(32)       | NO   | UNI | NULL    |                |
+-------------+-------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

mysql> select * from st
status                stu_info              stu_info.stu_gender  
stu_age               stu_info.id           stu_info.stu_name    
stu_cid               stu_info.stu_age      stu_info.stu_phone   
stu_classid           stu_info.stu_cid      stu_name             
stu_gender            stu_info.stu_classid  stu_phone            
mysql> select * from stu_info;
+----+----------------+------------+---------+---------+--------------+----------------------+
| id | stu_name       | stu_gender | stu_age | stu_cid | stu_classid  | stu_phone            |
+----+----------------+------------+---------+---------+--------------+----------------------+
|  1 | 测试姓名1      | 男         |      20 | 000001  | Python01     | 测试联系方式1        |
|  2 | 测试姓名2      | 男         |      23 | 000002  | Python02     | 测试联系方式2        |
|  3 | 测试姓名3      | 女         |      21 | 000003  | Python03     | 测试联系方式3        |
|  4 | 测试姓名4      | 男         |      28 | 000004  | php01        | 测试联系方式4        |
|  5 | 测试姓名5      | 男         |      30 | 000005  | php02        | 测试联系方式5        |
|  6 | 测试姓名6      | 女         |      25 | 000006  | php03        | 测试联系方式6        |
|  7 | 测试姓名7      | 男         |      35 | 000007  | JavaScript01 | 测试联系方式7        |
|  8 | 测试姓名8      | 男         |      31 | 000008  | JavaScript02 | 测试联系方式8        |
|  9 | 测试姓名9      | 女         |      26 | 000009  | JavaScript03 | 测试联系方式9        |
| 10 | 测试姓名10     | 男         |      24 | 000010  | SQL01        | 测试联系方式10       |
+----+----------------+------------+---------+---------+--------------+----------------------+
10 rows in set (0.00 sec)
mysql> select * from users;
+----+-----------+---------------+
| id | user_name | user_password |
+----+-----------+---------------+
|  1 | admin     | Python09      |
|  2 | momobaba  | 123456        |
+----+-----------+---------------+
2 rows in set (0.00 sec)

mysql> 


参考:

1/Ubuntu下安装mysql后root无法登陆也无法修改密码的问题解决_YT专栏-CSDN博客

2/UbuntuPythonMySQL学习笔记_明志博学_新浪博客

3/python连接mysql数据库实例demo(银行管理系统数据库版) - 蔡军帅 - 博客园

4/Mysql Workbench使用教程_zs1342084776的博客-CSDN博客_mysql workbench使用教程

 5

mysql如何创建数据库、创建表_芈途的博客-CSDN博客

6/ wxpython+MySQL实现学生信息管理系统_momobaba2018的博客-CSDN博客

7ubuntu安装mysql可视化工具MySQL-workbench及简单操作_编程小生的专栏-CSDN博客_ubuntu数据库可视化工具

8sudo apt-get install -f 超级实用Ubuntu 命令 解决安装软件依赖项_zbbmm的博客-CSDN博客

9Ubuntu sudo apt-get 安装下载更新软件包命令详解_一抹烟霞的博客-CSDN博客

10

ubuntu16.04无法安装mysql-workbench问题解决_tingyun_say的博客-CSDN博客

11Ubuntu下安装mysql和可视化工具超级简单教程 - 王怀宇 - 博客园

12 目标检测——Faster R-CNN 详解、Pytorch搭建、训练自己的数据集_woshicao11的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DLANDML

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值