1593
Comentário:
|
1840
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 3: | Linha 3: |
=== Como criar um pool de conexões no sqlalchemy ? === | = Usando sqlalchemy = == Usando somente a query expression language == |
Linha 5: | Linha 6: |
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,PrimaryKeyConstraint,Sequence,Boolean | db.py {{{#!python from sqlalchemy import create_engine, Table, Column, MetaData from sqlalchemy import Boolean, Integer, Unicode, String |
Linha 7: | Linha 11: |
from sqlalchemy.orm import sessionmaker | |
Linha 9: | Linha 12: |
#bdband -> alias criado no arquivo firebird.conf ( Firebird 2.1 ) | ### para conexao no sqlite: _url = 'sqlite://' ### para conexao no firebird # _url = URL('firebird', 'SYSDBA', 'masterkey', '192.168.1.11', '3052', 'bdband') ### para conexao no mysql # _url = 'mysql://usuario:senha@servidor/banco' |
Linha 11: | Linha 19: |
_url = URL('firebird','SYSDBA','masterkey','192.168.1.11','3052','bdband') engine = create_engine(_url) |
# cria o engine e metadata engine = create_engine(_url) |
Linha 15: | Linha 23: |
#cria a tabela cli_usu = Table('cli_usu', metadata, Column('cli_usu_id',Integer,Sequence('gn_cli_usu_id')),#criar um campo cli_usu_id, do tipo inteiro, utilizando sequence do banco Column('nome',String(20),nullable=False),#criar um campo nome, do tipo String com tamanho 20, não aceitando null Column('senha',String(10),nullable=False),#criar um campo senha, do tipo String com tamanho 10, não aceitando null Column('ativo',Boolean,nullable=False)#criar um campo ativo, do tipo Boolean (no caso do firebird o sqlalchemy irá criar o campo ativo do tipo smallint (0-false,1-true ), não aceitando null ) cli_usu_pk = PrimaryKeyConstraint('cli_usu_id',name='CLI_USU_PK') #criar a pk da tabela cli_usu, atribuindo um nome a constraint cli_usu.append_constraint(cli_usu_pk) #incluindo a pk à tabela cli_usu |
#cria as tabelas tb_usuarios = Table('usuarios', metadata, Column('id', Integer, primary_key=True), Column('nome', Unicode(20), nullable=False), Column('senha', String(10), nullable=False), Column('ativo', Boolean, nullable=False) ) |
Linha 28: | Linha 33: |
}}} | |
Linha 29: | Linha 35: |
#cria o sessionmaker Session = sessionmaker(bind=engine,autoflush=True,transactional=True) |
Exemplo de uso do arquivo acima {{{#!python import db # na hora de usar pega uma conexao con = db.engine.connect() ins = db.tb_usuarios.insert() con.execute(ins, [ dict(nome=u'jack', senha='senha', ativo=True), dict(nome=u'jonh', senha='ahnes', ativo=False), ]) con.close() }}} Um outro exemplo de uso, desta vez para consulta, e usando o contextlib.closing para fechar a conexão: {{{#!python import db from contextlib import closing with closing(db.engine.connect()) as con: sel_usuarios = db.tb_usuarios.select(db.tb_usuarios.c.ativo) resultado = con.execute(sel_usuarios) for registro in resultado: print registro.nome, registro.id, registro.senha, registro.ativo # conexao fechada automaticamente, mesmo se der algum erro }}} |
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
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