Classe de conexão ao MySQL pelo Python
Olá amigos da comunidade TabNews.
Me chamo Frank Granjense, sou programador desde 1999 e como acredito na ideia dessa plantaforma, farei aqui a minha primeira contribuição: uma classe para acesso 'fácil' ao MySQL pelo Python.
Usem á vontade nas suas aplicações e agradeceria que citasse esta publicação e/ou o github onde publiquei exclusivamente para este meu pontapé inicial no TabNews!
- Certifique-se que tenha o Python instalado no local onde deseja 'rodar' esta aplicação, senão tiver baixe no servidor do python e instale. E claro, que também tenha o MySQL instalado;
- Faça o download dos arquivos 'index.py' e da pasta 'assets' no repositório do github o 'python-mysql' ;
- Abra o arquivo 'db.py' que está na pasta 'assets' e edite as variavéis:
dbuser = "root"
- Digite o usuário para acesso ao mySQL. O padrão para acesso local é 'root'.
dbpass = ""
- Digite a senha para acesso ao mySQL. O padrão para acesso local é '' (vazio).
dbhost = "127.0.0.1"
- Digite o url do servidor onde está o mySQL. O padrão para acesso local '127.0.0.1'.
dbbase = "database"
- Substitua o 'database' para o nome do banco que deseja acessar. - Caso seu servidor necessite informar o caminho onde está o Python, edite a primeira linha do arquivo 'index.py' e substitua o caminho para acessar para o Python instalado no servidor que irá 'rodar' este sistema. Aqui no meu local (win10) ficou o caminho
#!C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe
, observe que tem o '#!' e depois o caminho completo. (uso o Xampp com o Python instalado. Caso queira fazer o mesmo, fiz uma publicação de como configurar o Python no Xampp aqui no TabNews!).
A SEGUIR: o arquivo 'index.py' e em seguida a explicação de como setá-lo
- Início do arquivo com o caminho da instalação do Python;
- Em seguida a importação da classe db;
- Setando o tipo do conteúdo (Content-Type);
- Criando uma variável chamada d com a classe Db com o nome da tabela que contém os dados:
#!C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe
from assets import db
print("Content-Type: text/html\n")
d = db.Db("tabela")
A SEGUIR: Explicando as funções 'query' e 'query_order'
- A funcão query tem 4 parâmetros, sendo os 3 primeiros obrigatórios:
- query( nome_campo , tipo_comparação , valor , tipo_busca )
nome_campo
- Nome de qualquer campo que tenha na tabela;
tipo_comparação
- O tipo de comparação padrão usada no MySQL que deseja trazer. Exemplos: '=' (igual) - '<>' (diferente) - '<' (menor) - '>' (maior) - '<=' (menor ou igual) - '>=' (maior ou igual) - 'LIKE' (que contenha o valor) - 'NOT LIKE' (que NÃO contenha o valor);
valor
- String, inteiro, fração..., ou seja, o valor que deseja buscar;
tipo_busca
- Não precisa setar caso a pesquisa tenha apenas 1 campo como filtro. SE TIVER mais de 1 tipo de informação que seja buscar, os valores possíveis são: 'AND' ou 'OR'. O padrão é sempre o 'AND', ou seja, informe se desejar, pois é facultativo. O valor 'OR' é obrigatório.
- A funcão query_order tem 2 parâmetros, sendo que o primeiro é obrigatório:
- query_order( nome_campo , tipo_ordem )
nome_campo
- Nome de qualquer campo que tenha na tabela;
tipo_ordem
- Comando de como o nome_campo será ordenado. Os comandos possíveis são 'ASC' e 'DESC'. O comando 'ASC' é padrão/facultativo, informe caso queira. Caso deseje a ordem de forma decrescente, informe o comando 'DESC';
A SEGUIR: Alguns exemplos de SETAR a função 'query' com o que deseja buscar
- Exemplo com filtro único: Buscar todos os resultados da tabela que tenham o valor busca1 no campo campo1. Mostrar os resultados que vem em array através do print:
d.query("campo1", "=", "busca1")
print(d.list())
Observe que no exemplo acima não informei o 4° parâmetro ('AND' ou 'OR'). Pois é apenas 1 filtro.
- Exemplo com 2 filtros concatenados (AND): Buscar todos os resultados da tabela que tenham o valor busca1 no campo campo1 E que também tenha o valor busca2 no campo campo2. Mostrar os resultados que vem em array através do print:
d.query("campo1", "=", "busca1", "AND")
d.query("campo2", "=", "busca2", "AND")
print(d.list())
Observe que nesse 2° exemplo, informei o valor 'AND' no 4° parâmetro. Porém, não precisaria, pois o valor 'AND' É PADRÃO DA FUNÇÃO, mas se deseja que fique visual para futuras manuntenções, você pode informá-lo.
- Exemplo com 2 filtragens POSSÍVEIS (OR). 1° parte com 2 filtos concatenadas (AND) e a 2° parte com filtro único: Buscar todos os resultados da tabela que tenham o valor busca1 no campo campo1 E que também tenha o valor busca2 no campo campo2 OU que tenha o valor numérico inteiro menor que 3 no campo campo3. Mostrar os resultados que vem em array através do print:
d.query("campo1", "=", "busca1", "AND")
d.query("campo2", "=", "busca2", "AND")
d.query("campo3", "<", "3", "OR")
print(d.list())
Nesse 3° exemplo, eu quero que o função da busca traga como resultado a filtragem de 2 campos OU que traga os resultados que tenham o valor numerico de outro campo (que tenham valor menor que 3).
Acredito que estes exemplos explicaram bem como funciona a função 'query'.
A SEGUIR: Alguns exemplos de como ORDENAR os resultados da busca com a função 'query_order'
- Exemplo com filtro único e ORDENAÇÃO CRESCENTE: Buscar todos os resultados da tabela que tenham o valor busca1 no campo campo1. Trazer os resultados ORDENADOS por ordem CRESCENTE o campo campo1. Mostrar os resultados que vem em array através do print:
d.query("campo1", "=", "busca1")
d.query_order("campo1")
print(d.list())
Observe que no exemplo 1, não informei o 2° parâmetro ('ASC' ou 'DESC'). Pois o comando 'ASC' é padrão, portanto facultativo. Mas caso desejar que fique mais visual, poderia informar este 2° parâmetro assim: d.query_order("campo3", "ASC")
- Exemplo com 2 filtros concatenados (AND) e ORDENAÇÃO DECRESCENTE de outro campo: Buscar todos os resultados da tabela que tenham o valor busca1 no campo campo1 E que também tenha o valor busca2 no campo campo2. Trazer os resultados ORDENADOS por ordem DECRESCENTE o campo campo3. Mostrar os resultados que vem em array através do print:
d.query("campo1", "=", "busca1", "AND")
d.query("campo2", "=", "busca2", "AND")
d.query_order("campo3", "DESC")
print(d.list())
Observe que nesse 2° exemplo, informei um outro campo que não está setado na função query.
- Exemplo com 2 filtragens POSSÍVEIS (OR). 1° parte com 2 filtos concatenadas (AND) e a 2° parte com filtro único. Tudo isso ORDENADOS por 2 campos, um em ordem crescente e outro por ordem descrescente: Buscar todos os resultados da tabela que tenham o valor busca1 no campo campo1 E que também tenha o valor busca2 no campo campo2 OU que tenha o valor numérico inteiro menor que 3 no campo campo3. Mostrar os resultados que vem em array através do print:
d.query("campo1", "=", "busca1", "AND")
d.query("campo2", "=", "busca2", "AND")
d.query("campo3", "<", "3", "OR")
d.query_order("campo1", "ASC")
d.query_order("campo3", "DESC")
print(d.list())
Nesse 3° exemplo, foi setado duas ordenações. A primeira é a principal ordenação. A segunda é a ordenação secundária. Ou seja, primeiro ordena pelo 1° comando d.query_order("campo1", "ASC")
, caso haja valores que estejam repetidos ordenará pelo 2° comando d.query_order("campo3", "DESC")
.
Acredito que estes exemplos explicaram bem como funciona a função 'query_order'.
A SEGUIR: Como ficará o arquivo 'index.py' com este último exemplo
#!C:/Users/Administrator/AppData/Local/Programs/Python/Python310/python.exe
from assets import db
print("Content-Type: text/html\n")
d = db.Db("tabela")
d.query("campo1", "=", "busca1", "AND")
d.query("campo2", "=", "busca2", "AND")
d.query("campo3", "<", "3", "OR")
d.query_order("campo1", "ASC")
d.query_order("campo3", "DESC")
print(d.list())
UFA! Espero que eu tenha conseguido explicar como funciona.
Obrigado pela oportunidade!
Frank Granjense