10. MySQL 练习 [税费计算]
![]() |
10.1. 将文本文件导入 MySQL 表
以下脚本将从以下文本文件中导入数据:
12620:13190:15640:24740:31810:39970:48360:55790:92970:127860:151250:172040:195000:0
0:0.05:0.1:0.15:0.2:0.25:0.3:0.35:0.4:0.45:0.5:0.55:0.6:0.65
0:631:1290.5:272.5:3309.5:4900:6898.5:9316.5:12106:16754.5:23147.5:30710:39312:49062
在以下 MySQL 数据库 [dbimpots] 的 [impots] 表中:
![]() |
将使用凭据 (root,"") 连接到 [dbimpots] 数据库。
程序 (impotstxt2mysql)
我们将采用以下架构:
![]() |
我们将编写的 [console] 脚本将使用 [ImpotsFile] 类来访问文本文件中的数据。对数据库的写入操作将使用之前讨论过的方法来实现。
脚本代码如下:
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 115 116 117 118 119 120 | |
注:
- 第 106–110 行:我们实例化了第 8.1 节中介绍的 [ImpotsFile] 类;
- 第 113 行:将数组 limites、coeffR 和 coeffN 传输到 MySQL 数据库;
- 第 8 行:copyToMysql 函数执行此传输操作。该函数会创建一个待执行的查询数组,并由第 25 行的 executerCommandes 函数执行这些查询;
- 第 28–89 行: ,executerCommandes 函数即第 9.7 节中已介绍的函数,唯一区别在于:查询语句不再存储在文本文件中,而是保存在一个列表中;
结果
文本文件 impots.txt:
12620:13190:15640:24740:31810:39970:48360:55790:92970:127860:151250:172040:195000:0
0:0.05:0.1:0.15:0.2:0.25:0.3:0.35:0.4:0.45:0.5:0.55:0.6:0.65
0:631:1290.5:272.5:3309.5:4900:6898.5:9316.5:12106:16754.5:23147.5:30710:39312:49062
屏幕显示结果:
使用 phpMyAdmin 进行验证:
![]() |
10.2. 税务计算程序
既然计算税款所需的数据已存入数据库,我们就可以编写税款计算脚本了。我们再次采用三层架构:
![]() |
新的 [dao] 层将连接到 MySQL 数据库管理系统,并由 [ImpotsMySQL] 类实现。它将为 [business] 层提供与之前相同的接口,该接口包含一个 getData 方法,该方法返回元组 (limits, coeffR, coeffN)。因此,[business] 层与上一版本相比将保持不变。
10.3. [ImpotsMySQL] 类
[dao]层现由以下[ImpotsMySQL]类实现(位于impots.py文件中):
注:
- 第 18 行:用于从 MySQL 数据库检索数据的 SELECT SQL 查询。随后,通过 [cursor.fetchone](第 22 行和第 32 行)逐行处理 SELECT 查询返回的结果行,以创建 limits、coeffR 和 coeffN 数组(第 28–30 行);
- [dao] 层接口的 getData 方法。
10.4. 控制台脚本
控制台脚本代码(impots_04)如下:
注释:
- 第 23 行:实例化 [dao] 和 [business] 层;
- 其余代码大家都很熟悉。
结果
与本练习的前几个版本相同。



