SQLFORM.grid e SQL View

89 views
Skip to first unread message

Charles tenorio

unread,
May 26, 2016, 3:06:24 PM5/26/16
to web2py-users-brazil
Boa tarde como eu faço pra exibir o resultado de uma SQL view do Mysql em uma SQLFORM.grid mas da erro

db.executesql("SELECT * FROM MinhaView")


Carlos Costa

unread,
May 29, 2016, 10:49:41 AM5/29/16
to web2py-us...@googlegroups.com

Erro?

Em 26/05/2016 16:06, "Charles tenorio" <charles...@gmail.com> escreveu:
Boa tarde como eu faço pra exibir o resultado de uma SQL view do Mysql em uma SQLFORM.grid mas da erro

db.executesql("SELECT * FROM MinhaView")


--
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.

Ari Sobel

unread,
May 29, 2016, 8:22:11 PM5/29/16
to web2py-us...@googlegroups.com
Acho que apenas funcionaria se vc declarasse essa view num model com define_table(). Nao creio que com executesql diretamente, funcionaria no grid.

Enviado do meu iPhone

Carlos Costa

unread,
May 30, 2016, 7:33:38 AM5/30/16
to web2py-us...@googlegroups.com
Tá faltando o código que você tenta montar o grid, pelo menos.
E o erro que está dando.
Ajuda a gente a te ajudar.


Carlos J. Costa
Cientista da Computação  | BS Computer Science
Esp. Gestão em Telecom   |
PgC Telecom Mangement
<º))><

Charles tenorio

unread,
May 30, 2016, 8:12:50 AM5/30/16
to web2py-users-brazil
olá pessoal 


Em quinta-feira, 26 de maio de 2016 16:06:24 UTC-3, Charles tenorio escreveu:
Boa tarde como eu faço pra exibir o resultado de uma SQL view do Mysql em uma SQLFORM.grid mas da erro

sql = db.executesql("SELECT * FROM MinhaView")

db.Rodadas.id.readable = False
db.Rodadas.val_casa.readable = False
db.Rodadas.val_fora.readable = False
db.Rodadas.val_empate.readable = False
db.Rodadas.val_com_gol.readable = False
db.Rodadas.val_com_dois_gols.readable = False
db.Rodadas.val_com_golFora.readable = False
db.Rodadas.val_com_dois_golsFora.readable = False
db.Rodadas.val_ambas_casa.readable = False
db.Rodadas.val_ambas_fora.readable = False
db.Rodadas.val_ambas.readable = False

grid = SQLFORM.grid(sql ,orderby=~db.Rodadas.datajojo ,
fields=[db.Rodadas.id,
db.Rodadas.id_time1,
db.Rodadas.id_time2,
db.Rodadas.val_casa,
db.Rodadas.val_empate,
db.Rodadas.val_fora,
db.Rodadas.val_com_gol,
db.Rodadas.val_com_dois_gols,
db.Rodadas.val_ambas_casa,
db.Rodadas.val_ambas_fora,
db.Rodadas.val_ambas,
db.Rodadas.datajojo,
db.Rodadas.val_com_golFora,
db.Rodadas.val_com_dois_golsFora,
db.Rodadas.hora,
],
showbuttontext=False,
links=lnk,
deletable=False,
editable=False,
create=False,
csv=False,
paginate=20
)
return grid 

Ari Sobel

unread,
May 30, 2016, 8:55:37 AM5/30/16
to web2py googlegroups
Querido, esse é o código...

E o erro?

--

Carlos Costa

unread,
May 30, 2016, 11:15:54 AM5/30/16
to web2py-us...@googlegroups.com
Veja a assinatura do método .grid
O primeiro parâmetro deve ser do tipo query, mas o executesql retorna lista de tuplas ou de dicionários.
O .grid precisa de consulta pois ele mesmo executa a consulta, e tem que executar várias vezes e com opções diferentes conforme você intarega com o grid.
Uma alternativa, como o Ari já citou é você mapear a view como se fosse uma tabela, usando o .define_table e depois passar só a consulta para o .grid como já está acostumado.

SQLFORM.grid(
    query,
    fields=None,
    field_id=None,
    left=None,
    headers={},
    orderby=None,
    groupby=None,
    searchable=True,
    sortable=True,
    paginate=20,
    deletable=True,
    editable=True,
    details=True,
    selectable=None,
    create=True,
    csv=True,
    links=None,
    links_in_grid=True,
    upload='<default>',
    args=[],
    user_signature=True,
    maxtextlengths={},
    maxtextlength=20,
    onvalidation=None,
    oncreate=None,
    onupdate=None,
    ondelete=None,
    sorter_icons=(XML('&#x2191;'), XML('&#x2193;')),
    ui = 'web2py',
    showbuttontext=True,
    _class="web2py_grid",
    formname='web2py_grid',
    search_widget='default',
    ignore_rw = False,
    formstyle = 'table3cols',
    exportclasses = None,
    formargs={},
    createargs={},
    editargs={},
    viewargs={},
    buttons_placement = 'right',
    links_placement = 'right'
    )

Charles tenorio

unread,
May 30, 2016, 12:35:15 PM5/30/16
to web2py-us...@googlegroups.com
eu já mapiei a view,  e coloquei migrate como False, mas quando  o código não retorna nada.
sql = db(db.MinhaView.datajojo >= datetime.now().date())

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/wIo7yP_Nbn0/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para web2py-users-br...@googlegroups.com.

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



--
Atenciosamente,
Charles Tenório
Desenvolvedor

Ari Sobel

unread,
May 30, 2016, 1:12:12 PM5/30/16
to web2py googlegroups
talvez 

sql = db(db.MinhaView.datajojo >= datetime.now().date())

nao retorne nada mesmo....
Novamente: deu algum erro?

abcs

Charles tenorio

unread,
May 30, 2016, 2:14:32 PM5/30/16
to web2py-users-brazil
não da erro só diz registro não encontrado


Em quinta-feira, 26 de maio de 2016 16:06:24 UTC-3, Charles tenorio escreveu:

Ari Sobel

unread,
May 30, 2016, 2:31:35 PM5/30/16
to web2py googlegroups
Pode ser que nao exista nenhum registro maior ou igual ao 'dia de hoje' no teu BD... Já pensou nisso?

Carlos Costa

unread,
May 30, 2016, 4:31:07 PM5/30/16
to web2py-us...@googlegroups.com
depois dessa linha coloque o seguinte:
print db._lastsql

Ela vai imprimir no console a consulta SQL que foi realizada.
Copie essa consulta e a execute no seu banco.
A partir daí você pode averiguar com mais exatidão se o problema é na sua view, na sua consulta, ou no seu código.
Pode ser o caso de formato de data diferente, por exemplo...

Ari Sobel

unread,
May 30, 2016, 5:08:10 PM5/30/16
to web2py googlegroups
Boa, Carlos, eu faria o mesmo...

As vezes mando printar o db._lastsql na própria View (= HTML) quando estou querendo ver se o SQL ta certo...

Carlos Costa

unread,
May 30, 2016, 5:32:26 PM5/30/16
to web2py-us...@googlegroups.com
Sim, Ari!
Também imprimo na view as vezes, principalmente quando estou debugando em produção.
Ham, o quê? Debug em produção?
Quem nunca debugou em produção que lance a primeira exception!
Reply all
Reply to author
Forward
0 new messages