Query usando DAL

13 views
Skip to first unread message

Gualter Portella

unread,
Jan 16, 2018, 2:54:06 PM1/16/18
to web2py-users-brazil
Prezados (as), boa tarde!

Preciso fazer uma consulta usando DAL em que eu possa extrair dados a partir de 3 parâmetros fixos e um que variará, que é o ano.

Assim, eu tenho como variáveis (integer) já definidas no controller:

banco = 67
cbr_id = 100
month = 12

A partir de uma lista, constam os demais parâmetros:

anos2 = [14, 15, 16, 17, 18, 19, 20, 21, 22]

Tentei o código abaixo, mas deu o seguinte erro:

>>> indicadores_banco = db(*[(db.indiban.meses_id == month & db.indiban.anos_id == ano &
...                         db.indiban.indicadores_id == cbr_id & db.indiban.empresas_id == banco) for ano in anos2]).select(
...                             db.indiban.meses_id, db.indiban.anos_id,
...                             db.indiban.empresas_id, db.indiban.indicadores_id, db.indiban.valor)
Traceback (most recent call last):
  File "<console>", line 2, in <module>
  File "<console>", line 2, in <listcomp>
TypeError: unsupported operand type(s) for &: 'int' and 'Field'

Também tentei a alternativa abaixo com e sem o asterisco, mas não funcionou:

>>> indicadores_banco = db((db.indiban.meses_id == month & db.indiban.empresas_id == banco &
...                         db.indiban.indicadores_id == cbr_id) & (*[db.indiban.anos_id == ano for ano in anos2])).select(
...                             db.indiban.meses_id, db.indiban.anos_id,
...                             db.indiban.empresas_id, db.indiban.indicadores_id, db.indiban.valor)
  File "<console>", line 2
SyntaxError: can't use starred expression here

>>> indicadores_banco = db((db.indiban.meses_id == month & db.indiban.empresas_id == banco &
...                         db.indiban.indicadores_id == cbr_id) & ([db.indiban.anos_id == ano for ano in anos2])).select(
...                             db.indiban.meses_id, db.indiban.anos_id,
...                             db.indiban.empresas_id, db.indiban.indicadores_id, db.indiban.valor)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'int' and 'Field

Alguma ideia sobre o que estou errando? Obrigado.

Gualter

Ari Sobel

unread,
Jan 17, 2018, 2:48:45 AM1/17/18
to web2py-us...@googlegroups.com
db((db.indiban.indicadores_id == cbr_id) & (db.indiban.empresas_id == banco) & (db.indiban.meses_id == month) & (db.indiban.anos_id.belongs(anos2))).select(

Enviado do meu iPhone
--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-br...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Gualter Portella

unread,
Jan 17, 2018, 3:58:24 PM1/17/18
to web2py-us...@googlegroups.com
Muito obrigado, Ari.

Enviado do meu iPhone
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/web2py-users-brazil/pKQq-y0rTks/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para web2py-users-br...@googlegroups.com.

Ari Sobel

unread,
Jan 18, 2018, 5:21:34 AM1/18/18
to web2py-us...@googlegroups.com
Deu certo?

Enviado do meu iPhone

Gualter Portella

unread,
Jan 18, 2018, 8:01:31 AM1/18/18
to web2py-us...@googlegroups.com
Testei ontem à noite e foi na mosca. Perfeito. Obrigado.

Enviado do meu iPhone

Ari Sobel

unread,
Jan 18, 2018, 3:05:49 PM1/18/18
to web2py googlegroups
Show
Ou seja , critérios separados por parenteses, e quando for fazer pertencer a uma lista (no caso, IN do SQL) , usar belongs.

Livre de vírus. www.avast.com.

Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/web2py-users-brazil/pKQq-y0rTks/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/web2py-users-brazil/pKQq-y0rTks/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages