Introdução ao SQLAlchemy
João Toss Molon (jtmolon@gmail.com)
Who?
● Graduando de Ciência da Computação na
Universidade de Caxias do Sul.
● Desenvolvedor Python/Zope/Plone na HaDi.
Com/Instituto Communitas/OTICS
● Baixista da Nantra =)
(facebook.com/bandanantra)
SQLAlchemy?
● Conjunto de ferramentas para integração de
bancos de dados relacionais e Python
Quem usa?
● Nós!
● E mais “alguns”...
SGBDs suportados
Posso usar para...
● Mapeamento Objeto-Relacional
● Acesso transparente ao banco através de
objetos, código Python puro
● Aplicação “multi-banco” (teoricamente...)
● Integração de produtos Plone com bancos
relacionais
Estrutura
Estrutura
● ORM (Object Relational Mapper)
○ Alto nível, mapeamento de classes Python para
tabelas do banco relacional
Estrutura
● Core
○ Linguagem de expressões SQL
○ Definição de schema
○ Conexão com o banco
Instalando
● Muito complexo
$easy_install SQLAlchemy
Instalou?
● Verificando se a instalação está ok
Conectando ao banco
● create_engine(string_conexao, echo)
○ string_conexao: SGBD, driver de conexão, usuario,
senha, host e nome do banco
Mapeando classes
● Extension declarative
○ declarative_base == base para mapeamento de
classes para tabelas
Mapeando classes
Mapeando classes
Criando as tabelas no banco
● Base.metadata.create_all(engine)
Instanciando um objeto
Criando uma sessão
● Session faz o controle da persistência de objetos
mapeados pelo ORM
○ Session = sessionmaker() #factory de sessions
○ Session.configure(bind=engine) #configura
conexao
○ session = Session() #nova session
Adicionando um objeto
● session.add(objeto) #adiciona o objeto
● session.new #lista os objetos novos
● session.dirty #lista os objetos modificados
● session.commit #persiste as modificações no banco
Consultando
● session.query(Classe).all() #lista com todos os objetos da
Classe
● session.query(Classe).first() #primeira ocorrência de um
objeto da Classe
● session.query(Classe).filter_by(campo=”dio”).all() #lista
de objetos filtrados por um campo com valor == ”dio”
Removendo
● Buscar o objeto e apagar
○ obj = session.query(Classe).filter_by(campo=”dio”).
first()
○ session.delete(obj)
Mas...funciona?
● Abre o terminal e mostra a que veio!
Fonte
● http://docs.sqlalchemy.org/en/rel_0_8/
Perguntas?

Introdução ao SQLAlchemy