PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Selecione colunas da chamada de função no núcleo sqlalchemy


Você vai querer usar FunctionElement.alias() e a leve column() :
from sqlalchemy import func, select, column

stmt = select([column('col1'), column('col2')]).\
    select_from(func.my_function().alias())

A documentação menciona especificamente o Postgresql como um caso de uso para esta construção. O acima produz:
SELECT col1, col2 
FROM my_function() AS anon_1

Usando o parâmetro _selectable de column() você também poderia:
In [4]: fn = func.my_function().alias()

In [5]: stmt = select([column('col1', _selectable=fn),
   ...:                column('col2', _selectable=fn)])

In [6]: print(stmt)
SELECT anon_1.col1, anon_1.col2 
FROM my_function() AS anon_1

mas como _selectable não for documentado, isso pode não ser uma boa ideia.