Veja um breve exemplo de como instalar e conectar o Storm no Plone
O que é Storm?
Storm é um mapeador de objeto-relacional (ORM) para Python desenvolvido pela Canonical. O projeto foi iniciado em 9 de Julho de 2007 e é utilizado em grandes projetos da Canonical como o Launchpad e o Landscape.
Vantagens
-
Uma API leve e simples com uma fácil nível de aprendizagem a curto e a longo prazo.
-
Desenvolvido em cima de forma test-drive, a cada linha de código não testada é considerado um bug.
-
Feito para trabalhar com pequenas e grandes bases de dados como SQLite, Mysql e Postgres.
-
Storm é fácil de depurar, pois seu código é escrito com um princípio KISS(Keep It Simple & Stupid), sendo assim fácil de entender.
Características
-
Rápido
-
Storm deixa-o de forma eficiente acessar e atualizar grandes conjuntos de dados, permitindo-lhe formular consultas complexas que abrangem várias tabelas, utilizando Python.
-
Storm trata o composto de chaves primárias com facilidade.
-
Storm manipula as relações entre objetos mesmo antes de serem adicionados a um banco de dados.
Como implementar?
Partindo do conceito que um Plone site esteja instalado e configurado.
Instalação via buildout
Buildout é uma ferramenta open source de construções de software que auxilia a instalação de produtos, módulos e aplicações feitas em Python.
Crie um arquivo com o nome de storm.cfg e adicione o conteúdo abaixo:
[buildout]
eggs +=
mysql-python
storm
[instance]
zcml +=
storm.zope-meta
storm.zope
Salve o arquivo e execute o buildout, passando como parâmetro o arquivo storm.cfg, exemplo:
./bin/buildout -c storm.cfg
O buildout acima efetua a instalação para um ambiente Zope, após a sua execução basta apenas a efetuar a conexão em algum produto Plone.
Conectando o Storm
A conexão do storm com um produto Plone é feita no arquivo configure.zcml veja o exemplo abaixo de um produto de nome “example.product”
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:five="http://namespaces.zope.org/five"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="example.product">
<five:registerPackage package="." initialize=".initialize" />
<include package=".browser" />
<include package=".product" />
<include package="storm.zope"/>
<include package="storm.zope" file="meta.zcml"/>
<store
name="NomeBaseDeDados"
uri="mysql://usuario:senha@localhost:porta/BaseDeDados" />
<genericsetup:registerProfile
name="default"
title="example.product"
directory="profiles/default"
description="Installs the example.product package"
provides="Products.GenericSetup.interfaces.EXTENSION"
/>
<!-- -*- extra stuff goes here -*- -->
</configure>
Sendo name="NomeBaseDeDados" o nome da base de dados que deseja conectar, logo abaixo o campo uri é informado qual nome de usuário, senha, máquina e base de dados seja conectado.
Modelagem dos dados
Abaixo segue a tabela para modelagem de dados em Python em relação as bases de dados.
|
Propriedade |
Python |
PostgreSQL |
MySQL |
SQLite |
|
Bool |
bool |
BOOL |
TINYINT(1) |
INT |
|
Int |
int, long |
SERIAL, BIGSERIAL, SMALLINT, INT, BIGINT |
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT |
INT |
|
Float |
float |
FLOAT, REAL, DOUBLE PRECISION |
FLOAT, REAL, DOUBLE PRECISION |
REAL, FLOAT, DOUBLE |
|
Decimal |
Decimal |
DECIMAL, NUMERIC, MONEY |
DECIMAL, NUMERIC |
TEXT, VARCHAR |
|
Unicode |
unicode |
TEXT, VARCHAR, CHAR |
TEXT, VARCHAR, CHAR |
TEXT, VARCHAR |
|
RawStr |
str |
BYTEA |
BLOB, BINARY, VARBINARY |
BLOB |
|
Pickle |
any |
BYTEA |
BLOB, BINARY, VARBINARY |
BLOB |
|
DateTime |
datetime |
TIMESTAMP |
DATETIME, TIMESTAMP |
TEXT, VARCHAR |
|
Date |
date |
DATE |
DATE |
TEXT, VARCHAR |
|
Time |
time |
TIME |
TIME |
TEXT, VARCHAR |
|
TimeDelta |
timedelta |
INTERVAL |
TEXT |
TEXT, VARCHAR |
|
List |
list |
ARRAY[] |
? |
TEXT, VARCHAR |
