Arquivo para julho de 2009

Utilizando a Classe Set do Python

Recentemente fiz uma aplicação onde tinha que verificar a diferença entre algumas estrutura de dados inicialmente fiz na mão mesmo, mas não me conformei com isso e resolvi fazer uma pesquisa para saber como se faz isso no python.

Encontrei uma classe que trabalha com todas as ações básicas dos conjuntos.

Obs.: Fiz uns exemplos básicos e que para alguns podem parecer sem sentido mas server  apenas para mostrar os conceitos da classe.

Vamos lá então, primeiro vou criar uma estrutura de dados que vou chamar de opções isso poderia estar vindo de uma banco de dados ou mesmo lendo um arquivo TXT.

Povoando nossas opções.

 opcoes =  [9, 3, 6, 5, 0, 1, 7, 2, 8, 4]

E inicializaremos nossas bases de números impares e pares.

pares = []
impares = []

#Gerando duas novas listas a partir das opções dadas
for numero in opcoes:
    if numero % 2 == 0:
        pares.append(numero)
    else:
        impares.append(numero)

Para que possamos trabalhar com a classe SET a origens de dados devem ser do tipo SET também.

opcoes  = set(opcoes)
pares   = set(pares)
impares = set(impares)

Agora vamos começar os testes. OBA!!!!

#Descobrir dentre as opções descobrir quais estão no grupo dos pares
opcoesPares = set.intersection( opcoes, pares )

#Descobrir dentre as opções descobrir quais estão no grupo dos impares
opcoesImpares = set.intersection( opcoes, pares )

#Fazendo  a união das duas listas
paresMaisImpares = set.intersection( opcoesPares, opcoesImpares )

#Vamos verificar se o grupo dos pares são pertencentes ao grupo de opções
paresPertencemAOpecoes = set.issubset( pares, opcoes )

#Verificar o que tem de diferente entre as opções e os numeros impares
naoContemEssesNumerosNosImpares = set.difference( opcoes, impares )

Bem acho que é isso fiz alguns exemplos bem básicos e acredito que pode ser um ponto de partida para um estudo mais aprofundado então como última dica a respeito seria isso.

http://docs.python.org/library/sets.html

Mas se não tiver afim de ir para net pode ser por modo interativo mesmo.

$ python
Python 2.4.3 (#1, Jul 27 2009, 17:57:39)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help(set)

Se tiverem exemplos mais interessantes deixe nos comentários que serão devidamente divulgados com os nomes dos autores

Postgresql – Backup de todas as base de dados

postgresql

Motivado por esse post ( http://www.vivaolinux.com.br/dica/PostgreSQL-Fazendo-backup-de-um-servidor-inteiro ) resolvi fazer algumas adaptações para atender as minhas especificações.

Eu preciso ter backup do servidor inteiro mais não necessáriamente preciso retornar todas as bases para o novo servidor novamente, por esse motivo fiz o meu próprio script para resolver esse problema.

Utilizando a linguagem python associada aos aplicativos do postgresql montei esta rotina.

#!/usr/bin/env python
#! -*- coding:utf8 -*-
########################################################
#  Script para fazer o pg_dump de todos os
#   bancos da máquina em que ele for executado
#  Valdinei dos Santos
#  valdineidossantos(at)gmail.com.br
#  27 Julho de 2009
########################################################
#Importando o getstatusoutput responsavel por executar os comandos do sistema operacional
from commands import getstatusoutput
from datetime import datetime
from os import path

#config
psql="/usr/bin/psql"
pg_dump="/usr/bin/pg_dump"
user="pguser-vale"
host="valdineidossantos.com"
repository = "/media/backup/databases/"

#Functions
def getAllDatabases(psql, user, host):
    print "\nRecuperando as bases de dados do servidor %s" % host
    command = "%s -U %s -h %s -l" % (psql, user, host)
    status, output = getstatusoutput ( command )
    if int(status) == 0:
       #return lista de servidores
       return stringToListServers( output )
    else:
        return [[],] 

def stringToListServers( databaseString ):
    print "\nFormatando a string"
    temp_pieces = databaseString.split("\n")
    dataBases = []
    for i in temp_pieces[3:]:
        try:
            pieces = i.split("|")
            owner  = pieces[1].strip()
            dbName = pieces[0].strip()
            encode = pieces[2].strip()
            data   = [dbName, encode, owner]
            if data:
                dataBases.append ( data )
        except Exception, e:
            continue
            #print e.__doc__
    return dataBases

#Init
if __name__ == '__main__':

    allDataBases =  getAllDatabases(psql, user, host)

    day = datetime.now().strftime("%Y%m%d")
    for database, encode, owner in allDataBases:
        #name Example databasename-20092707.dump
        dumpName = "%s-%s.dump" % (database, day)    

        #/dev/null/databasename-20092707.dump
        file = path.join(repository, dumpName)

        command = "%s -U %s -h %s -E %s  -f %s -i -Fc %s " % (pg_dump, user, host, encode, file, database)

        status, output = getstatusoutput( command)

        if int(status) > 0:
            print "Erro no backup da database %s\n %s" % (database, output)

Após esse script finalizado teremos no diretorio que foi setado no config “repository” todos os bancos de dados disponiveis no servidor.
Para voltar novamente com a base dados para o novo servidor rodamos o comando.

pg_restore -d |nome da base dados| -Fc |caminho/nome do arquivo dump|

Temos algumas outras opções em shell script  mas preferi usar  o python  :)
Python

Tags: , , ,