10. Exercício [Cálculo de impostos] com MySQL
![]() |
10.1. Transferência de um ficheiro de texto para uma tabela MySQL
O script a seguir irá transferir dados do seguinte ficheiro de texto:
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
na tabela [impots] da seguinte base de dados MySQL [dbimpots]:
![]() |
A ligação à base de dados [dbimpots] será estabelecida utilizando as credenciais (root,"").
Iremos utilizar a seguinte arquitetura:
![]() |
O script [console] que vamos escrever utilizará a classe [ImpotsFile] para aceder aos dados no ficheiro de texto. O acesso de escrita à base de dados será realizado utilizando os métodos discutidos anteriormente.
O código do script é o seguinte:
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 | |
Notas:
- linhas 106–110: instanciamos a classe [ImpotsFile] apresentada na secção 8.1;
- linha 113: as matrizes limites, coeffR e coeffN são transferidas para uma base de dados MySQL;
- linha 8: a função copyToMysql realiza esta transferência. A função copyToMysql cria uma matriz de consultas a executar e faz com que estas sejam executadas pela função executerCommandes, linha 25;
- linhas 28–89: a função executerCommandes é a mesma já apresentada anteriormente na secção 9.7, com uma diferença: em vez de estarem num ficheiro de texto, as consultas estão numa lista;
O ficheiro de texto 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
Resultados da triagem:
Verificação com o phpMyAdmin:
![]() |
10.2. O programa de cálculo de impostos
Agora que os dados necessários para calcular o imposto estão numa base de dados, podemos escrever o script de cálculo do imposto. Estamos novamente a utilizar uma arquitetura de três camadas:
![]() |
A nova camada [dao] será ligada ao SGBD MySQL e será implementada pela classe [ImpotsMySQL]. Fornecerá à camada [business] a mesma interface de antes, consistindo no único método getData que devolve a tupla (limits, coeffR, coeffN). Assim, a camada [business] permanecerá inalterada em relação à versão anterior.
10.3. A classe [ImpotsMySQL]
A camada [dao] é agora implementada pela seguinte classe [ImpotsMySQL] (ficheiro impots.py):
Notas:
- linha 18: a consulta SQL SELECT que recupera dados da base de dados MySQL. As linhas de resultados da consulta SELECT são então processadas uma a uma utilizando [cursor.fetchone] (linhas 22 e 32) para criar as matrizes limits, coeffR e coeffN (linhas 28–30);
- o método getData da interface da camada [dao].
10.4. O script da consola
O código do script da consola (impots_04) é o seguinte:
Notas:
- Linha 23: instanciação das camadas [dao] e [business];
- O resto do código é familiar.
O mesmo que nas versões anteriores do exercício.



