Arquivo de python com access

Python + “Banco de dados access”

Posted in Programação, Python, Tecnologia with tags , on 4 de junho de 2009 by fchevitarese

Opa!!

Quantas vezes nos deparamos com sistemas desenvolvidos por terceiros, e temos que dar manutenção nos mesmo!
Na realidade não sei! hehehe… Só sei que aconteceu comigo!
Existia um sistema, desenvolvido em VB6, utilizando o “banco de dados” access… Se é que se pode realmente chamar isto de banco de dados!

O que era armazenado neste banco, eram strings de tráfego de texto… Até aí tudo bem!

Acontece que, não haviam chaves primárias e, o campo onde eram guardadas as strings é do tipo memorando, ou seja, analisar os registros era inviável!
Fazer um select utilizando o LIKE, para buscar parde da string não funcionou de forma alguma!
O que fazer!?!!?!? “Oh xit modefoker!”

A vontade que dá mesmo, é de cobrir de porrada o $@##$@# que fez esta #@!#@! … Mas vamos lá!

Pensei no Python, pela sua facilidade… Mas se o select não funcionava, como iria fazer a pesquisa?

Pois bem, a primeira tarefa foi a conexão com o banco, depois, como a string armazenada era realmente um arquivo txt, com suas tabulações, quebras de linha etc., resolvi pegar todos os resultados e gravar em arquivos para depois fazer a pesquisa nos arquivos! 😉

Vamos lá …

Para começar, precisamos instalar o módulo que será responsável pela conexão com o MDB …
A criança pode ser encontrada aqui

Faça o download do pacote apropriado a versão do python que você tem instalado em sua máquina ok! 😉

Tudo instalado, vamos criar o script…

Primeiramente, devemos importar os módulos que serão utilizados…

import win32com.client, sys, os.path, glob

Onde, win32com é o módulo responsável pela conexão com o Access…
Os outros módulos são do próprio python. Para saber mais a respeito dos mesmos, dê uma googlada, pois o escopo deste tuto é a conexão com o banco 😉

Vamos definir a variável de conexão e a variável para o recordset:

conexao = win32com.client.Dispatch(“ADODB.Connection”)
Rs = win32com.client.Dispatch(“ADODB.Recordset”)

No meu caso, como fiz um script mais “genérico”, ou seja, um script onde eu possa analisar o banco que eu quiser, faço então uma interação com o usuário, para que o mesmo especifique o caminho e nome do banco de dados ok!

banco = raw_input(u’Digite o caminho completo para o arquivo MDB:\n’)

try:

conexao.Open(“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + str(banco))

except:

print(u’Ocorreu um erro ao acessar o banco de dados …’)
raise SystemExit

Lembrem-se de tabular corretamente o código, pois ainda não descobri como colar o código tabulado no blog.. .rsrsrs

No código acima, estamos perguntando ao usuário, qual é o caminho completo para o banco de dados.
Depois tentamos a conexão de acordo com os dados passados. O bloco try foi utilizado para que, caso o usuário informe incorretamente o caminho, não gere um erro esdruxilo! 😉

Agora, vamos perguntar em qual tabela será efetuada a pesquisa, e também já definimos o select que será feito na mesma:

tabelaPesquisa = raw_input(‘Digite a tabela a ser pesquisada:\n’)

strSQL = “Select * from ” + str(tabelaPesquisa)
print strSQL
Rs.Open(strSQL, conexao, 2,3)

Agora, vamos pegar o nome do campo e definir o diretório onde serão gravados os arquivos com os resultados:

#Selecionando os registros …
i = 0
if not Rs.EOF:
#Pegando o nome dos campos …
for tabela in Rs.Fields:
nomeTabela = tabela.Name

#Definindo manualmente onde serão gravados os registros …
caminho = raw_input(u’Digite o diretorio onde serao gravados os arquivos:\n’).strip()

Rs.MoveFirst() #(Eu havia esquecido deste detalhe!!)

while not Rs.EOF:
i += 1
dados = Rs.Fields[nomeTabela].value
arq = file(str(caminho) + “\Pedido” + str(i) + “.txt”, ‘w’)
try:
arq.write(dados)
except:
print “Occoreu um erro ao gravar o arquivo…”
raise SystemExit
arq.close()
print u”\rProcessando registro %d … ” % i,


Rs.MoveNext() # (E deste também!)

#break
else:
print u”Nao encontrei nada …”

Após pegar o valor do registro, defino o nome do arquivo que será gerado com os dados deste registro.
Eu pré-defini o nome como Pedidos + o número do registro. Mude a vosso gosto 😉

Os blocos try, como da vez anterior, são para tratar possíveis erros na hora da gravação dos dados no txt…

Aqui, você encontra mais informações, métodos e outras particularidades do módulo de conexão com o access…

Segue para download, um documento do Word com o script… Repeitando as tabulações, é só copiar o que está dentro dele e salvar como um arquivo do Python 😉

Python+Access

Abraços…

Fred Chevitarese – GNU/Linux