1724
Comentário:
|
1840
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 3: | Linha 3: |
=== Criando tabela no sqlalchemy === | = Usando sqlalchemy = == Usando somente a query expression language == |
Linha 5: | Linha 6: |
db.py | |
Linha 6: | Linha 8: |
#este arquivo: db.py: from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData from sqlalchemy import PrimaryKeyConstraint,Sequence,Boolean from sqlalchemy.orm import sessionmaker |
from sqlalchemy import create_engine, Table, Column, MetaData from sqlalchemy import Boolean, Integer, Unicode, String |
Linha 14: | Linha 12: |
#bdband -> alias criado no arquivo firebird.conf ( Firebird 2.1 ) #bdband pode ser substituido por 'c:/dados/banco.fdb' |
### 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 17: | 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 21: | Linha 23: |
#cria a tabela cli_usu = Table('cli_usu', metadata, Column('cli_usu_id',Integer,Sequence('gn_cli_usu_id')), Column('nome',String(20),nullable=False), Column('senha',String(10),nullable=False), Column('ativo',Boolean,nullable=False) ) #cria a pk cli_usu_pk = PrimaryKeyConstraint('cli_usu_id',name='CLI_USU_PK') #adiciona a pk a tabela cli_usu.append_constraint(cli_usu_pk) |
#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 37: | Linha 33: |
}}} | |
Linha 38: | Linha 35: |
#cria o sessionmaker Session = sessionmaker(bind=engine,autoflush=True) |
Exemplo de uso do arquivo acima |
Linha 41: | Linha 37: |
sessao = Session() ins = cli_usu.insert().values(nome='jack',senha='senha',ativo='1') sessao.execute(ins) sessao.commit() sessao.close() |
{{{#!python import db |
Linha 47: | Linha 40: |
#Agora, a partir de qualquer lugar do seu projeto, voce pode instanciar uma sessao. | # 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() }}} |
Linha 49: | Linha 50: |
#outro arquivo: login.py | Um outro exemplo de uso, desta vez para consulta, e usando o contextlib.closing para fechar a conexão: {{{#!python |
Linha 51: | Linha 55: |
sessao = db.Session() sel_cli = db.cli_usu.select(db.cli_usu.c.ativo==1) result = sessao.execute(sel_cli) for row in result: print row.nome,row.cli_usu_id,row.senha,row.ativo sessao.commit() sessao.close() |
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