Consulta com ALIAS usando DAL

A DAL é um recurso muito útil para manipulação de banco de dados pois se aproxima ao máximo da sintaxe SQL que conhecemos.

Em determinados casos precisamos retornar em uma consulta valores pré processados como no exemplo abaixo.

select tabela.valor*tabela.quantidade from tabela where tabela.campo = 'isto';

A DAL permite que façamos isso no seu construtor select(), no momento em que devemos passar os campos que desejamos retornar na consulta.

Exemplo

db.define_table(
    'itens'
    , Field('price')
    , Field('quantity')
)
resultado = db().select(db.itens.ALL)

Veja que omitimos os parâmetros de db(), pois ali é o onde vai nosso WHERE, o db.person.ALL é o mesmo que o '*' do SQL.

Se precisarmos retornar por exemplo o valor de quantidade multiplicado pelo preço, fazendo um subtotal, precisaríamos do seguinte

subtotal = db.itens.price*db.itens.quantity
fields = db.itens.ALL # ALL é uma lista com o nome dos campos
fields.append(subtotal) # acrescentamos a nossa lista o campo subtotal
resultado = db().select(fields=fields)

Para obtermos nosso campo fazemos uma iteração
for i in resultado:
     print(i[subtotal])

Para facilitarmos nossa vida podemos ainda criar um alias para o subtotal, assim:

subtotal = db.itens.price*db.itens.quantity
fields = db.itens.ALL # ALL é uma lista com o nome dos campos
fields.append(subtotal.with_alias('subtotal'))

E resgatarmos com um:
for i in resultado:
    i.subtotal

Veja como é fácil usar o DAL para fazer consultas SQL. Lembrando que o DAL nada mais é do que uma adaptação do pyDAL para o Web2py, esse módulo vem separado no novo framework py4web.

Para saber mais sobre DAL e pyDAL consulte a documentação nos links abaixo aqui.
http://web2py.com/books/default/chapter/31/06/a-camada-de-abstracao-do-banco-de-dados

https://pypi.org/project/pydal/

Não deixe de ler nosso artigo sobre select recursivo e de praticar.
https://web2pymania.blogspot.com/2020/04/select-recursivo-web2py.html

Comentários

Postagens mais visitadas deste blog

Web2py com NGINX

Configurar o web2py no Apache e Ubuntu LTS

API RESTFul no web2py