Agenda de contatos com Python e MySQL

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

Anúncios
por ferpinheiro Postado em Python

3 comentários em “Agenda de contatos com Python e MySQL

  1. Boas,
    Muito obrigado pela sua partilha de conhecimento\codigo. Gostaria de tirar uma duvida consigo se possivel.

    Obrigado.

    André

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s