Introdução ao SQLAlchemy
João Toss Molon ([email protected])
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?