Veja o artigo completo em: http://www.ibm.com/developerworks/br/library/os-pythonpackaging/index.html
Utilizando o SQLAlchemy no Flask com MySQL
Quando tentei utilizar esta combinação, seguindo justamente o howto do site do Flask, me ocorria um erro depois de um tempo em que a conexão não era utilizada:
SqlAlchemy: SQLError: (OperationalError) (2006, ‘MySQL server has gone away’)
E como resolver isto ? Em vários posts por ai vi o pessoal utilizando-se da configuração “pool_recycle” para deixar a conexão mais tempo no ar, tentando colocar a conexão na sessão, e tudo mais… nada funcionou!
Só consegui resolver isto do modo pessimista, adicionando o seguinte código no database.py:
from sqlalchemy import exc
from sqlalchemy import event
from sqlalchemy.pool import Pool
@event.listens_for(Pool, "checkout")
def ping_connection(dbapi_connection, connection_record, connection_proxy):
cursor = dbapi_connection.cursor()
try:
cursor.execute("SELECT 1")
except:
# optional - dispose the whole pool
# instead of invalidating one at a time
# connection_proxy._pool.dispose()
# raise DisconnectionError - pool will try
# connecting again up to three times before raising.
raise exc.DisconnectionError()
cursor.close()
E voialá ! Funcionou !…
Novos rumos: Pyramid
Ontem tive meu primeiro contato real com o Pyramid!

Depois de trabalhar várias vezes com o Django, de conhecer bem ele, suas várias features e tudo mais, acabei precisando de um framework mais flexível para meu projeto que quero desenvolver, e que, não saiu ainda do papel por que em certo ponto do desenvolvimento tudo se tornava massante e trabalhoso.
Mas eu realmente vi uma luz no fim do tunel com o Pyramid. Se mostrou um fw simples, consistente e flexível. Não tive trabalho algum para iniciar um projeto e sair programando algo mais simples, como criar uma outra view além da default, bastou utilizar uma meia-hora e dar uma passada de olho na documentação.
Claro que, eu não fiz nada demais, apenas iniciei o projeto, fiz algumas alterações, tomei conhecimento do ambiente gerado por ele, rodei o ambiente de desenvolvimento, estas coisas. A partir de agora é trabalhar para aprender mais e mais deste frameworks que pelo visto vai me facilitar a vida.
Outra coisa, eu achei muito simples trabalhar com o mongodb juntamente com o Pyramid. Praticamente não necessita de configuração, é só chamar e usar.. hehehe Mas um detalhe que me deixou meio triste foi que não funcionou o projeto com o template para utilizar o Jinja2 como renderer dos templates web. Gosto muito do Jinja2 pelas facilidades, e principalmente pela herança de templates possível, onde você cria uma página com seções definidas e pode criar outras páginas que herdam esta página e imprimem somente nas seções que deseja.. mas o template engine do Pyramid, que veio do Pylons, não é tão mal assim, mas é mais trabalhoso, pois trabalha com umas tags no meio do html, e não me pareceu muito pythônico. Tudo bem !
Bom , é isto por enquanto, depois posto aqui como iniciar um projeto simples com o Pyramid + MongoDB ! Ok !
Abraços !
Livros onlines…
Aside
Olá !
Quero parabenizar o pessoal por ter traduzido o livro “A Byte of Python” para português.
Segue o link: http://swaroopch.com/notes/Python_pt-br:Indice
E sei que este blog é especialmente voltado ao Python, mas quero aqui citar também outro belo trabalho de tradução, voltado ao Ruby, “O (comovente) Guia de Ruby do Why”
Segue o link tb: http://why.nomedojogo.com/
3 coisas legais para Python
PyRO – Python Remote Objects – É uma poderosa e avançada tecnologia de objetos distribuídos totalmente escrita em python.
Pytesser – Módulo OCR para Python
Pyrex - Permite você extender o Python criando módulos para a linguagem, com syntaxe Python, que serão compilados para C.
Outros sites de “gincana” de programação
Fica ai então a dica, do amigo leitor Guaracy, de outros dois sites equivalentes ao Project Euler.
São eles: http://rosettacode.org e http://www.pythonchallenge.com/
O Python Challenge é um pouco diferente na forma de apresentar as questões, pois você tem que resolver uma para depois ter a próxima disponível, além de ser direcionado a programação Python mesmo. Fora isto, aprenderemos muito igualmente aos outros !
Aproveitem !
Cálculo de números primos
Partindo de algumas leituras sobre as regras de números primos, então acabei por criar um pequeno script que gera os números primos de 1 até um limite informado, da forma mais pythônica que consegui.
def eh_primo(numero):
#Verifica se um numero eh primo ou nao
return True if sum([ 1 for div in range(2,numero) if numero % div == 0 ]) == 0 else False
def primos(limite):
#Numeros primos
numeros = [2] + range(3,limite+1,2)
primos = []
for num in numeros:
if sum([ 1 for div in range(2,num) if num % div == 0 ]) == 0 :
primos.append(num)
return primos
print primos(100)
print primos(500)
print eh_primo(18)
print eh_primo(19)
print eh_primo(20)
print eh_primo(23)
Explicando:
- Números primos são somente números ímpares e o 2
- Não valida com 1 e o próprio número, pois não necessita
- cria uma lista com o 2 e a partir do 3, somente os ímpares
- verifica se a SOMA dos 1 retornados para cada NÚMERO onde o resto da divisão (%) entre o NÚMERO e cada um dos menores que ele for igual a zero, quer dizer que o número é divisível por outro número além de 1 e ele mesmo.
Olha, não é fácil entender a primeira vista este trecho de código, mas consegui finalmente chegar até um pequeno script sem muitos loops, graças as facilidades do python, com sua List Comprehension e Programação Funcional !
Conseguem melhorar ainda mais este script ?