Tradução do Pylons Cheat Sheet atualizada

24/01/2008

Email por Walter Cruz em Python, Pylons
Tags: authkit, elixir, pylons, python, sqlalchemy

Alguns links sobre SQLAlchemy

23/08/2007

Semana passada, foi publicada uma comparação em ORMs Python, incluindo SQLAlchemy, Storm e Geniusql.

O SQLAlchemy é um dos ORM's mais famosos para Python. Ele implementa o padrão Data Mapper, e é possível ter objetos mapeados não para apenas uma tabela, mas para dados com junções e consultas. O padrão Active Record (mais simples que o Data Mapper, pois mapeia apenas um objeto para uma tabela), popularizado pelo Ruby on Rails, pode ser usado com o SQLAlchemy através do Elixir. Eu usei o Elixir no artigos.waltercruz.com.

Alguns links:

A versão 0.4 do SQLAlchemy será lançada em breve, e trará algumas mudanças. O tutorial disponível no site do Pylons já conta com uma atualização para a nova versão.


Email por Walter Cruz em Python, Ruby, Rails
Tags: elixir, geniusql, orm, pylons, python, sqlalchemy, storm

TurboGears no fim de semana

05/06/2007

Há duas semanas, eu publiquei um texto chamado 'Django no fim de semana', relatando uma pequena experiência que fiz com o Django.

Na sexta-feira, o Torcato publicou um artigo chamado SQLALchemy no TurboGears. Resolvi tirar o sábado para testar o tutorial.

Usei o PostgreSQL no lugar do MySQL, o que me causou um pouco de dor de cabeça, não por causa do PostgreSQL em si, mas por causa do conector psycopg. Estou usando o Ubuntu Feisty Fawn, que vem com Python 2.5. Eu tinha instalada duas cersões do conector: psycopg e psycopg2. Ao iniciar o servidor do TurboGears com ambas as versões instaladas, ele morria no meio do caminho com core dump. Resolvi remove o psycopg2, e passou a iniciar. Mas não sem problemas: os SQL estavam sendo gerados de forma incorreta (mais especificamente, sem aspas nos campos string). Resolvi fazer o teste com o Python 2.4, reinstalei o psycopg2 e pra minha surpresa funcionou perfeitamente. Pelo visto, coisa está meio bichada na combinação python2.5 e psycopg2. Uma pena.

Se alguém resolver testar, eis o script de criação da tabela, versão PostgreSQL:

CREATE TABLE categories (

    id serial,
    name varchar(100)   NOT NULL DEFAULT '',
    PRIMARY KEY(id)
)

CREATE TABLE recipes ( id serial,
     category_id int NOT NULL,
     title varchar(100)   NOT NULL DEFAULT '',
     description varchar(255)   NULL,
     date  date NULL,
     instructions text  NULL,
     constraint fk_recipes_categories FOREIGN KEY (category_id) REFERENCES categories(id),
     PRIMARY KEY(id)
);
 

Alguns pontos:

  • O TurboGears provê uma ferramenta chamada toolbox, que inclui algumas coisas legais como um interpretador de python para a web (usando ajax), o Model Designer para criar os models e o CatWalk, para o CRUD dos modelos e o WidgetBrowser(mais sobre ele à seguir), entre outros. O Django inclui o admin no seu pacote contrib, porém o admin é voltado ao usuário, enquanto o CatWalk é voltado ao desenvolvedor. Porém, o CatWalk e o ModelDesigner ainda não funcionam com o SQLAlchemy. Um pequeno preço a pagar por sair do padrão :)
  • Gostei do sistema de templates Kid. Os zopistas vão se sentir familiares com ele, e suas construções py:content e py:replace. Você pode querer dar uma olhada no que eles tem em comum.
  • Como o tutorial do Torcato foi bem sucinto, resolvi brincar um pouco alêm dele. Baixei o tgcrud no http://www.turbogears.org/cogbin/ . Porém, me senti como se tivesse sido iludido por uma propaganda enganosa: ele não faz a introspecção para saber as colunas do seu objeto. Ele gera o esqueleto do CRUD, porém ele não sai funcionando antes de você dar uma modificada. Na verdade, a propaganda não foi enganosa: ela diz que é dessa forma que funciona. Apenas minha expectativas que eram muitas.
  • Achei o código dos controladores parecidos com os do rails. (Eu não cheguei a mexer muito com as views[controllers] do Django, então não posso dizer exatamente como foi essa parte).
  • Uma das idéias que eu achei interessante no desenvolvimento Plone+Archetypes são os widgets. Com widgets, você não precisa escrever o HTML para o seu formulário. Você pega o seu modelo, declara que o campo nome é do tipo TextWidget ou algo assim e o template já renderiza. Pode não ser a forma mais flexível de todas, mas é prático.
  • No geral, encontrei pouca documentação do TurboGears, e menos ainda sobre a combinação SQL+Alchemy e TurboGears. Para vocês terem idéia, a página que vem em primeiro lugar na busca do google é a própria página do Torcato. Tente você mesmo!
  • Eu não conseguiria fazer o deploy da aplicação com o TurboGears no meu site, devido à versão do meu apache e mod_python. Poderia tentar usando FastCGI e ver se eu não fico frustrado como esse cara.

Resumindo: foi um pouco mais difícil mexer com o TurboGears que com o Django, mas note-se que eu fui muito mais 'raso' no Django - não cheguei a escrever praticamente nenhum template, e os aplicativos em si eram diferentes. Achei pouca documentação do TurboGears. Dei uma olhada por alto no SQLAlchemy e fui com a cara do mesmo - dá pra usar DataMapper ou ActiveRecord com ele. Eu diria que no geral o TurboGears ficou com um pontinho a menos que o Django.


Email por Walter Cruz em Python, Programação, Ruby, Django, Frameworks
Tags: crud, django, elixir, fastcgi, pylons, python, sqlalchemy, turbogears