Python MySQL - CGI
recebi alguns e-mails sobre dúvidas de conexão do Python com bancos relacionais sem utilização de frameworks e, por isso, escrevi algo para compartilhar com a comunidade.
Apesar do advento dos frameworks para as diversas linguagens que geram páginas dinâmicas para a WEB, pequenas aplicações podem ser desenvolvidas utilizando CGI (Common Gateway Interface) que é definida pelo W3C (http://www.w3.org/CGI/) como uma interface comum utilizada pelos servidores WEB para a implementação de scripts que retornam páginas dinâmicas, como consultas a banco de dados por exemplo.
Originalmente, o CGI era associado a linguagem Perl, porém passou a ser utilizado por outras linguagens como Python.
Segue exemplo completo de uma página HTML que passará uma string chamada "descricao" para o script python index.py e conectará com o MySQL via servidor WEB Apache, utilizando a interface CGI. Lembrando que precisamos utilizar um wrapper python para o MySQL, compatível com o Python DB API Interface. Neste exemplo utilizamos o mysql-python, disponível para download no sourceforge.net.
Código index.html
------------------
<html>
<head><title>Pesquisa no banco</title></head>
<body>
<form name=form1 action="index.py" method=post>
<input type=text name=descricao size=30>
<input type=submit name=consultar value=Consultar>
</form>
</body>
</html>
------------------
Código index.py
------------------
#!/python/python
"""
A linha acima, apesar de iniciar com "#" que indica linha de comentário, informa o caminho do interpretador python. No caso de windows, o caminho acima está
apontando para c:\python\python.exe.
Logo abaixo importamos os módulos MySQLdb e cgi, que são responsáveis, respectivamente, pela API do MySQL com Python e a recuperação dos
parâmetros do formulário.
"""
import MySQLdb,cgi
"""
Cria um objeto da classe FormContentDict() que retorna o conteúdo do formulário em um dicionário com uma lista de valores.
"""
form = cgi.FormContentDict()
# Recupera o valor do parâmetro 'descricao' em um dicionário.
descricao = form.dict['descricao']
# Cria uma conexão com o banco retornando um objeto Connection.
bd = MySQLdb.connect(host="localhost",user="r
"""
Emula um cursor e returna uma tupla a fim de preparar o banco para uma query.
Com o uso da classe DictCursor serão retornadas linhas como dicionários. Sem a classe DictCursor o retorno serão linhas como tuplas.
"""
cursor = bd.cursor(MySQLdb.cursors.DictCursor)
"""
Executa o sql no banco para o cursor criado. O sql utiliza o like para comparar
a string passada no form no campo descricao da tabela.
"""
cursor.execute("select * from tabela where descricao like '%"+descricao[0]+"%'")
produtos = cursor.fetchall()
print "Content-type: text/html"
print """<html><body>
<h3 align=center>Consulta Parametrizada</h3>"""
# Testa se a consulta retornou algo e entra no for para printar os resultados.
if cursor.rowcount != 0:
print "<p align=center>Consulta sem resultados.</p>"
# Fecha o cursor.
cursor.close()
#Fecha a conexao com o banco.
bd.close()
print "</body></html>"
----------------
Bom pessoal, espero ter ajudado com esse exemplo. Qualquer dúvida enviem e-mails!
Abraços,
"Tomo café e programo ágil em Python!"
