O script em Python a seguir permite consultar um banco de dados MySQL e gravar localmente um arquivo contendo a saída da exceção da query em um arquivo separado por vírgulas (CSV). Além do Python em si, é necessária a instalação do módulo MySQLdb, o que pode ser feito através do comando “sudo apt-get install python-mysqldb”.
# -*- coding: utf-8 -*- # Script para consultar BD e gravar CSV import os import sys import MySQLdb # Período de busca ini = "2017-01-01" fim = "2017-12-31" estados = ['AC','AL','AM','AP','BA','CE','DF','ES','GO','MA','MG','MS','MT','PA','PB','PE','PI','PR','RJ','RN','RO','RR','RS','SC','SE','SP','TO'] # Apagar arquivo de destino e gravar cabeçalho with open('totais.csv', 'wb') as f: f.write('estado,cidade,total\n') for uf in estados: print uf # Montar query query = "SELECT estado,cidade,sum(vendas) as raios from `" + uf + "` WHERE data BETWEEN '" + ini + "' AND '" + fim + "' GROUP BY cidade;" #print query # Fazer consulta ao BD conn = MySQLdb.connect(host="IP_DO_BD",port=3306,user="USUARIO_DO_BD",passwd="SENHA_DO_USUARIO",db="NOME_DA_BASE") cursor = conn.cursor() cursor.execute(query) results = cursor.fetchall() # Fechar ponteiro e conexão cursor.close() conn.close() #for items in results: # print items[0],items[1],items[2] # Gravar arquivo com dados with open('totais.csv', 'a') as f: for line in results: f.write("%s,%s,%d\n" %(line[0],line[1],int(line[2]))) #sys.exit("fim de teste")
A query usada serve para pegar o total de uma variável somando por cidade. Caso dê um erro do tipo “Host ‘SEU_IP’ is not allowed to connect to this MySQL server”, será preciso criar um usuário no MySQL do servidor e permitir o acesso à base de dados – veja mais no post sobre Banco de dados MySQL.
Caso seja um banco em PostgreSQL, o módulo a ser usado é o Psycopg. O script recebe um argumento de identificação qualquer (tipo) e o nome da tabela (table_name), monta a query para ser executada e grava um arquivo com a tabela extraída.
#!/usr/bin/python # -*- coding: utf-8 -*- import os import sys import psycopg2 import psycopg2.extras # Receber tipo e nome da tabela como argumento tipo = sys.argv[1] table_name = sys.argv[2] path = os.path.dirname(os.path.realpath(__file__)) print "Baixando dados de " + tipo # Montar query para extrair todas as colunas desde 2001-JAN query = "SELECT * FROM %s WHERE yr >= 2001 ORDER BY yr,mon;" % (table_name) #print(query) #sys.exit("fim de teste") # Executar query conn = psycopg2.connect(host = "IP_DO_BD", database = "NOME_DA_BASE", user="USUARIO_DO_BD") cursor = conn.cursor(cursor_factory = psycopg2.extras.DictCursor) cursor.execute(query) tabela = cursor.fetchall() # Fechar ponteiro e conexão cursor.close() conn.close() #print(tabela) # Gravar arquivo com dados with open('%s/dados/hist_%s.csv' % (path, tipo), 'wb') as f: f.write('data,valor\n') for linha in tabela: # Escrever linha por linha no formato YYYY-MM-01,VALOR f.write("%s-%02d-01,%s\n" %(linha[0],int(linha[1]),linha[2]))
A query executada retorna todas as colunas cujas linhas possuam ano maior ou igual a 2001. Ao gravar o arquivo de saída, linha por linha, o valor de mês é acertado para sempre ter dois dígitos (com zero à esquerda quando for o caso). Veja mais sobre PostgreSQL clicando no link.