No dia-a-dia precisamos acessar as informações que estão em bancos de dados relacionais, seja para gerar relatórios, seja para exibir dados de outros sistemas.
Faça essa integração de forma transparente, ágil e eficiente utilizando SQLAlchemy.
1. SQLAlchemy e Plone
No more ZSQL Methods
Python Brasil
São Paulo
Gustavo
Lepri
lepri@simplesconsultoria.com.br
2. O que é SQL Alchemy?
SQLAlchemy é um toolkit SQL Python e um
mapeador objeto relacional (ORM - Object Relational
Mapper) que permite aos desenvolvedores de
aplicações toda a potência e flexibilidade do SQL.
Gustavo
Lepri
lepri@simplesconsultoria.com.br
3. O que são ZSQL Methods?
ZSQL Methods são um objeto zope similar a um
DTML Method ou Scripts Python especializados
para serem usados com bancos de dados
relacionais. Eles são o caminho mais fácil para
conectar o Zope a RDBMS. Contêm comandos
SQLe DTML em associação.
Gustavo
Lepri
lepri@simplesconsultoria.com.br
5. Configuração
• A configuração da conexão é feita no arquivo
configure.zcml
• São utilizadas global utility e local utility
• Podem ser configuradas conexões globais –
uma por instância Zope .
• Ou locais - por site Plone
Gustavo
Lepri
lepri@simplesconsultoria.com.br
7. config.py
from sqlalchemy.ext.declarative import declarative_base
from z3c.saconfig import named_scoped_session
Base = declarative_base()
SCOPED_SESSION_NAME = ‘session.teste.db'
session =
named_scoped_session(SCOPED_SESSION_NAME)
Gustavo
Lepri
lepri@simplesconsultoria.com.br
8. Criação das tabelas
• A criação das tabelas é realizada pelo disparo na importação
do profile do produto.
• Import_steps.xml
<?xml version="1.0"?>
<import-steps>
<import-step id=“identificador-create_tables" version="20101020-11“
handler=“pacote.produto.setuphandlers.create_tables“
title="Create Base Tables">
<dependency step="toolset" />
</import-step> </import-steps>
Gustavo
Lepri
lepri@simplesconsultoria.com.br
9. Mapeamento – setuphandlers.py
from z3c.saconfig import named_scoped_session
from pacote.produto.config import Base
from pacote.produto..config import SCOPED_SESSION_NAME
Session = named_scoped_session(SCOPED_SESSION_NAME)
create_tables(context):
'''Called at profile import time to create necessary tables ''‘
if isNotOurProfile(context):
return
Base.metadata.create_all(bind=Session.bind)
Gustavo
Lepri
lepri@simplesconsultoria.com.br
10. Mapeamento
import sqlalchemy as as
[...]
from pacote.projeto.config import Base
class Projeto(Base):
"""Um projeto""“
implements(IProjeto)
__tablename__ = 'projeto‘
__table_args__ = {'mysql_engine':'InnoDB','mysql_charset':'utf8'}
projetoid =
sa.Column(sa.INT,nullable=False,index=True,primary_key=True)
[...]
Gustavo
Lepri
lepri@simplesconsultoria.com.br