associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "DicasSqlalchemy"

Diferenças entre as versões de 7 e 8
Revisão 7e 2009-12-17 19:51:06
Tamanho: 1844
Comentário: modificados exemplos
Revisão 8e 2009-12-17 19:51:41
Tamanho: 1840
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 3: Linha 3:
=== Usando sqlalchemy === = Usando sqlalchemy =

Usando sqlalchemy

Usando somente a query expression language

db.py

   1 from sqlalchemy import create_engine, Table, Column, MetaData
   2 from sqlalchemy import Boolean, Integer, Unicode, String
   3 from sqlalchemy.engine.url import URL
   4 
   5 ### para conexao no sqlite:
   6 _url = 'sqlite://'
   7 ### para conexao no firebird
   8 # _url = URL('firebird', 'SYSDBA', 'masterkey', '192.168.1.11', '3052', 'bdband')
   9 ### para conexao no mysql
  10 # _url = 'mysql://usuario:senha@servidor/banco'
  11 
  12 # cria o engine e metadata
  13 engine = create_engine(_url)
  14 metadata = MetaData(bind=engine)
  15 
  16 #cria as tabelas
  17 tb_usuarios = Table('usuarios', metadata,
  18                  Column('id', Integer, primary_key=True),
  19                  Column('nome', Unicode(20), nullable=False),
  20                  Column('senha', String(10), nullable=False),
  21                  Column('ativo', Boolean, nullable=False)
  22         )
  23 
  24 #cria as tabelas no banco (caso nao existam)
  25 metadata.create_all()

Exemplo de uso do arquivo acima

   1 import db
   2 
   3 # na hora de usar pega uma conexao
   4 con = db.engine.connect()
   5 ins = db.tb_usuarios.insert()
   6 con.execute(ins, [
   7                 dict(nome=u'jack', senha='senha', ativo=True),
   8                 dict(nome=u'jonh', senha='ahnes', ativo=False), 
   9             ])
  10 con.close()

Um outro exemplo de uso, desta vez para consulta, e usando o contextlib.closing para fechar a conexão:

   1 import db
   2 from contextlib import closing
   3 
   4 with closing(db.engine.connect()) as con:
   5     sel_usuarios = db.tb_usuarios.select(db.tb_usuarios.c.ativo) 
   6     resultado = con.execute(sel_usuarios)
   7     for registro in resultado:
   8         print registro.nome, registro.id, registro.senha, registro.ativo
   9 # conexao fechada automaticamente, mesmo se der algum erro