Olá pessoal. Hoje vou mostrar como criar uma rápida agenda em Python usando banco de dados MySQL.
Ao final desse tutorial voce terá aprendido:
– Criar uma base de dados no MySQL.
– Criar uma tabela nessa base de dados.
– Manipular os dados dessa tabela (Inserir, Procurar, Alterar e Excluir).
– Passos basicos para conexão ao banco utilizando Python.
– Criar uma agenda de contatos.
Para esse tutorial vamos precisar ter instalado em nosso computador:
– Python
– Modulo MySQLdb
– MySQL
O modulo MySQLdb prove funcionalidades para manipulação de bases de dados MySQL através da linguagem Python.
Criando a base de dados:
Em um terminal digite: mysql -u root -p (Digite então a senha do banco de dados)
Então você terá uma tela como essa:

Agora vamos criar a base de dados que irá se chamar Agenda, para isso digite:
CREATE DATABASE Agenda;

Em seguida digite o comando: show databases; Você terá a seguinte tela:

Note que já existe algumas outras bases de dados além da criada por nós. Vamos selecionar a nossa base digitando: use Agenda;

Agora vamos criar uma tabela para nossa base. Essa tabela irá se chamar “pessoas” para isso digite:
create table pessoas(
id int(10) unsigned not null auto_increment,
nome varchar(60) not null,
endereco varchar(50) not null,
email varchar(40) not null,
telefone varchar(15) not null,
primary key (id));

Após termos criado a tabelas vamos visualiza-la para ver se esta tudo certo, digite então: desc pessoas;
Então teremos:

A base de dados Agenda esta pronta para ser usada! Vamos ao código Python. O código será dividido em 8 partes ou funções, são elas:
1 Principal = _main_
2 Tela do Usuario = opcaoUsuario()
3 Conexão com o Banco = funcConectaBanco()
4 Cadastrar Contato = funcCadastrar()
5 Consultar Contatos = funcConsultar()
6 Alterar Contato = funcAlterar()
7 Excluir Contato = funcExcluir()
8 Mostrar todos os Contatos do Banco = funcMostrarTodos()
1 Principal:
Inicia o programa chamando a função opçãoUsuario() que é a tela inicial do software.
# Autor: Fernando Krein Pinheiro
# Data: 08/03/2012
# Linguagem: Python
# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.
#! /usr/bin/env python
import time
import os
import sys
import string
import MySQLdb
if __name__=='__main__':
opcaoUsuario()
2 Tela do Usuario:
Após ter sido chamada pela função principal a função opcçaoUsuario() mostrar algumas das opções que o usuário poderá escolher. Caso escolha uma determinada opção então é chamada outra função responsável pela opção escolhida.
def opcaoUsuario():
os.system("clear");
print "==================================="
print "======= Agenda de Contatos ========"
print "==================================="
opcao = raw_input("Escolha a opcao desejada\n\n[1] - Cadastrar\n[2] - Consultar\n[3] - Alterar\n[4] - Excluir\n[5] - Mostrar Todos\n[6] - Sair")
try:
opcao = int(opcao)
if opcao<1 or opcao>6:
os.system("clear");
print "OPCAO INVALIDA: Verifique o valor digitado"
time.sleep(2)
opcaoUsuario()
except:
os.system("clear");
print "OPCAO INVALIDA: Verifique o valor digitado"
time.sleep(2)
opcaoUsuario()
if opcao == 1:
conecta = conectaBanco()
funcCadastrar(conecta)
elif opcao == 2:
conecta = conectaBanco()
funcConsultar(conecta)
elif opcao == 3:
conecta = conectaBanco()
funcAlterar(conecta)
elif opcao == 4:
conecta = conectaBanco()
funcExcluir(conecta)
elif opcao == 5:
conecta = conectaBanco()
funcMostrarTodos(conecta)
elif opcao == 6:
sys.exit()
3 Conexão com o Banco:
Usa o metodo MySQLdb.conect() para iniciar a conexão com o banco, seus parâmetro são: host, usuario e senha da base de dados. Ainda possui outro método select_db() que seleciona a base. Os parâmetros para esse método é o nome da base de dados, nesse caso Agenda. Faz tratamento de exceções caso necessário através de try: exception: retorna o objeto “conecta” que é repassado para as outras funções para manipulação de outros métodos.
def conectaBanco():
HOST = "localhost"
USER = "root"
PASSWD = "SenhaDoseuBancodeDados"
BANCO = "Agenda"
try:
conecta = MySQLdb.connect(HOST, USER, PASSWD)
conecta.select_db(BANCO)
except MySQLdb.Error, e:
print "Erro: O banco especificado nao foi encontrado...",e
menu = raw_input()
os.system("clear")
opcaoUsuario()
return conecta
4 Cadastrar Contato:
Recebe o objeto “conecta” da função funcConectaBanco(), espera a entrada do teclado digitada pelo usuário e a converte para letras maiúsculas afim de prover um padrão de gravação na base. (Isso serve para nossa base ficar organizada não misturando caracteres maiúsculos e minúsculos). A conversão é feita pelo método string.upper(). Criamos um cursor através de conecta.cursor() para manipulação das consultas SQL. Definimos uma consulta SQL com o comando INSERt para inserir os dados lidos do teclado na base. Repassamos essa consulta para o método cursor.execute() e então usamos o método cursor.commit() para concretizar o comando SQL, tratamos possíveis erros com try: exception: e fechamos a conexão através do método close().
def funcCadastrar(conecta):
print "\n\nDigite os dados:\n"
name = str(raw_input("Nome: "))
name = (name.upper())
address = str(raw_input("Endereco: "))
address = (address.upper())
mail = str(raw_input("Email: "))
mail = (mail.upper())
fone = str(raw_input("Telefone: "))
fone = (fone.upper())
cursor = conecta.cursor()
sql="INSERT INTO pessoas (nome,endereco,email,telefone) VALUES ('"+name+"','"+address+"','"+mail+"','"+fone+"')"
try:
cursor.execute(sql)
conecta.commit()
except MySQLdb.Error, e:
print "Erro: " + sql
print e
print "Dados gravados com sucesso."
conecta.close()
menu = raw_input()
os.system("clear")
opcaoUsuario()
5 Consultar Contatos:
Recebe o objeto “conecta” da função funcConectaBanco(), espera a entrada do teclado digitada pelo usuário e a converte para letras maiúsculas afim de prover compatibilidade com os dados gravados na base. Criamos um cursor através de conecta.cursor() para manipulação das consultas SQL. Definimos uma consulta SQL com o comando SELECT para selecionar os dados na base. Repassamos essa consulta para o método cursor.execute(), imprimimos os dados da consulta e então usamos o método cursor.commit() para concretizar o comando SQL, tratamos possíveis erros com try: exception: e fechamos a conexão através do método close().
def funcConsultar(conecta):
name = str(raw_input("\nDigite o Nome a Pesquisar: "))
name = (name.upper())
cursor = conecta.cursor()
sql="SELECT * FROM pessoas WHERE nome='"+name+"'"
resultados = 0
try:
cursor.execute(sql)
resultado = cursor.fetchall()
for dados in resultado:
ide = dados[0]
nome = dados[1]
endereco = dados[2]
email = dados[3]
telefone = dados[4]
resultados= int(resultados)
resultados = resultados + 1
print"\n----------------------------\n"
print " ID: %s\n Nome: %s\n Endereco: %s\n Email: %s\n Telefone: %s"%(ide, nome, endereco, email, telefone)
conecta.commit()
except MySQLdb.Error, e:
print "Erro: " + sql
print e
print "\n\nForam encontrados %d resultados"%resultados
conecta.close()
menu = raw_input()
os.system("clear")
opcaoUsuario()
6 Alterar Contatos:
Recebe o objeto “conecta” da função funcConectaBanco(), espera a entrada do teclado digitada pelo usuário e a converte para letras maiúsculas afim de prover compatibilidade com os dados gravados na base. Criamos um cursor através de conecta.cursor() para manipulação das consultas SQL. Definimos uma consulta SQL com o comando UPDATE para alterar os dados na base. Repassamos essa consulta para o método cursor.execute() e então usamos o método cursor.commit() para concretizar o comando SQL, tratamos possíveis erros com try: exception: e fechamos a conexão através do método close().
def funcAlterar(conecta):
print "\n\nDigite os dados:\n"
ide = raw_input("ID do contato a alterar: ")
novo_nome = raw_input("Novo Nome: ")
novo_nome = (novo_nome.upper())
cursor = conecta.cursor()
sql = "UPDATE pessoas SET nome='"+novo_nome+"' WHERE id='"+ide+"'"
try:
cursor.execute(sql)
conecta.commit()
except MySQLdb.Error, e:
print "Erro: " + sql
print e
print "Alteracao feita com sucesso."
conecta.close()
menu = raw_input()
os.system("clear")
opcaoUsuario()
7 Excluir Contato:
Recebe o objeto “conecta” da função funcConectaBanco(), espera a entrada do teclado digitada pelo usuário e a converte para letras maiúsculas afim de prover compatibilidade com os dados gravados na base. Criamos um cursor através de conecta.cursor() para manipulação das consultas SQL. Definimos uma consulta SQL com o comando DELETE para excluir os dados na base. Repassamos essa consulta para o método cursor.execute() e então usamos o método cursor.commit() para concretizar o comando SQL, tratamos possíveis erros com try: exception: e fechamos a conexão através do método close().
def funcExcluir(conecta):
print "\n\nDigite os dados:\n"
ide_exclusao = raw_input("ID a Excluir: ")
cursor = conecta.cursor()
sql = "DELETE FROM pessoas WHERE id='"+ide_exclusao+"'"
try:
cursor.execute(sql)
conecta.commit()
except MySQLdb.Error, e:
print "Erro: " + sql
print e
print "Exclusao feita com Sucesso."
conecta.close()
menu = raw_input()
os.system("clear")
opcaoUsuario()
8 Mostrar todos os Contatos do Banco:
Recebe o objeto “conecta” da função funcConectaBanco(). Criamos um cursor através de conecta.cursor() para manipulação das consultas SQL. Definimos uma consulta SQL com o comando SELECT para selecionar os dados na base. Repassamos essa consulta para o método cursor.execute(), imprimimos todos os resultados da consulta e então usamos o método cursor.commit() para concretizar o comando SQL, tratamos possíveis erros com try: exception: e fechamos a conexão através do método close().
def funcMostrarTodos(conecta):
resultados = 0
cursor = conecta.cursor()
sql="SELECT * FROM pessoas;"
try:
cursor.execute(sql)
resultado = cursor.fetchall()
for dados in resultado:
ide = dados[0]
nome = dados[1]
endereco = dados[2]
email = dados[3]
telefone = dados[4]
resultados= int(resultados)
resultados = resultados + 1
print"----------------------------------"
print " ID: %s\n Nome: %s\n Endereco: %s\n Email: %s\n Telefone: %s"%(ide, nome, endereco, email, telefone)
conecta.commit()
except MySQLdb.Error, e:
print "Erro: " + sql
print e
print "\n\nForam encontrados %d resultados"%resultados
conecta.close()
menu = raw_input()
os.system("clear")
opcaoUsuario()
Copie e cole todo o código em um mesmo arquivo. Para executar o programa digite no terminal: python Agenda.py
E pronto!! Voce verá uma tela como essa:

Agora é só testar para ver se tudo está funcionando…
Download do código, imagens e instruções SQL.
Algumas Referencias:
MySQL 5.5 Reference Manual
Documento sobre SQL e MySQL
MySQLdb user guide Python
MySQL Python Tutorial
Curtir isso:
Curtir Carregando...