Dear all,
I hope this e-mail finds you all well.
I have written two queries to retrieve data from my database (model). I did
them initially through plain SQL, then I followed the DAL syntax. They all
return the same output regardless the syntax chosen. Please, see the code
below:
Two different controllers:
def sql():
sql = "SELECT indiban.valor, meses.abrev, anos.numero, empresas.nome "
sql = sql + "FROM indiban INNER JOIN meses ON indiban.meses_id =
meses.id "
sql = sql + "INNER JOIN anos ON indiban.anos_id = anos.id "
sql = sql + "INNER JOIN indicadores ON indiban.indicadores_id =
indicadores.id "
sql = sql + "INNER JOIN empresas ON indiban.empresas_id = empresas.id "
sql = sql + "WHERE indicadores.id = 3 "
sql = sql + "AND meses.id = 5 AND anos.id = 22 Limit 10;"
ratios = db.executesql(sql)
sql = "SELECT eleban.valor, meses.abrev, anos.numero, empresas.nome "
sql = sql + "FROM eleban INNER JOIN meses ON eleban.meses_id = meses.id
"
sql = sql + "INNER JOIN anos ON eleban.anos_id = anos.id "
sql = sql + "INNER JOIN elementos ON eleban.elementos_id = elementos.id
"
sql = sql + "INNER JOIN empresas ON eleban.empresas_id = empresas.id "
sql = sql + "WHERE elementos.id = 5 "
sql = sql + "AND meses.id = 5 AND anos.id = 22 Limit 10;"
accounts = db.executesql(sql)
return locals()
def sfn():
ratios = db((Indiban.meses_id==mes_id)&(Indiban.anos_id==ano_id)&
(Indiban.indicadores_id==rspla_id)).select(Indiban.empresas_id,
Indiban.valor,
Indiban.meses_id, Indiban.anos_id, limitby=(0, 10))
accounts = db((Eleban.meses_id==mes_id)&(Eleban.anos_id==ano_id)&
(Eleban.elementos_id==ativo_id)).select(Eleban.empresas_id,
Eleban.valor,
Eleban.meses_id,
Eleban.anos_id, limitby=(0, 10))
return locals()
DAL output:
indiban.empresas_idindiban.
valorindiban.meses_idindiban.anos_idSISTEMA FINANCEIRO
NACIONAL0.1300052016BANCO DO BRASIL0.1100052016BRB - BANCO DE
BRASILIA0.0200052016POTTENCIAL-0.0100052016CAIXA ECONOMICA
FEDERAL0.0300052016BANCO INTERMEDIUM0.0400052016RIBEIRAO
PRETO0.1200052016BGN
CETELEM-0.1200052016SEMEAR-0.0100052016BM&FBOVESPA0.1500052016
------------------------------
eleban.empresas_ideleban.valoreleban.meses_ideleban.anos_idSISTEMA
FINANCEIRO NACIONAL7404931306106.43052016BANCO DO
BRASIL1070715292094.95052016BRB - BANCO DE
BRASILIA13013438306.52052016POTTENCIAL167724699.00052016CAIXA ECONOMICA
FEDERAL1096578802720.18052016BANCO INTERMEDIUM2745032207.17052016RIBEIRAO
PRETO486037290.78052016BGN
CETELEM8371996257.63052016SEMEAR717457527.11052016BM&FBOVESPA234811696.13052016
SQL Output:
((Decimal('0.1300'), u'mai', u'2016', u'SISTEMA FINANCEIRO NACIONAL'),
(Decimal('0.1100'), u'mai', u'2016', u'BANCO DO BRASIL'),
(Decimal('0.0200'), u'mai', u'2016', u'BRB - BANCO DE BRASILIA'),
(Decimal('-0.0100'), u'mai', u'2016', u'POTTENCIAL'), (Decimal('0.0300'),
u'mai', u'2016', u'CAIXA ECONOMICA FEDERAL'), (Decimal('0.0400'), u'mai',
u'2016', u'BANCO INTERMEDIUM'), (Decimal('0.1200'), u'mai', u'2016',
u'RIBEIRAO PRETO'), (Decimal('-0.1200'), u'mai', u'2016', u'BGN CETELEM'),
(Decimal('-0.0100'), u'mai', u'2016', u'SEMEAR'), (Decimal('0.1500'),
u'mai', u'2016', u'BM&FBOVESPA'))
------------------------------
((Decimal('7404931306106.43'), u'mai', u'2016', u'SISTEMA FINANCEIRO
NACIONAL'), (Decimal('1070715292094.95'), u'mai', u'2016', u'BANCO DO
BRASIL'), (Decimal('13013438306.52'), u'mai', u'2016', u'BRB - BANCO DE
BRASILIA'), (Decimal('167724699.00'), u'mai', u'2016', u'POTTENCIAL'),
(Decimal('1096578802720.18'), u'mai', u'2016', u'CAIXA ECONOMICA FEDERAL'),
(Decimal('2745032207.17'), u'mai', u'2016', u'BANCO INTERMEDIUM'),
(Decimal('486037290.78'), u'mai', u'2016', u'RIBEIRAO PRETO'),
(Decimal('8371996257.63'), u'mai', u'2016', u'BGN CETELEM'),
(Decimal('717457527.11'), u'mai', u'2016', u'SEMEAR'),
(Decimal('234811696.13'), u'mai', u'2016', u'BM&FBOVESPA'))
The data in the output are identical as expected. What I want to do is to
combine the two queries into one, preferably in DAL, so that I do not need
to use two loops in order to insert the indiban.valor and eleban.valor
values side by side in a view table. So far, I've failed miserably.
The tables indiban and eleban are linked to the meses, anos and empresas
tables as depicted in the relational schema below. If you can help me, I'd
appreciate much. Otherwise, I will stick to the two loops.
Best regards,[image: Imagem inline 2]
Gualter
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.