Добавить собственную литеральную строку в качестве дополнительного поля в результате запроса - SQLAlchemy - PullRequest
0 голосов
/ 04 июня 2018

Как в SQLAlchemy ORM сделать аналог следующего необработанного sql?

SELECT "http://example.com/page/"||table.pagename as pageUrl

Требуется получить значение из таблицы, изменить его с помощью ORM / Python (здесь просто конкатенация строк) и вывести в результате запроса SQLAlchemy в качестве дополнительного поля.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Это можно сделать с помощью select, но ORM почти отсутствует:

from sqlalchemy.sql import select, text
q = select([text('"http://example.com/page/"||pagename as pageUrl')]).select_from(Table)
session.execute(q).fetchall()

Результатами будет список объектов в классе RowProxy.

Мне кажется, что решить через session.query (ответ выше) удобнее.Он короткий, и в результате получается класс result, который можно легко преобразовать в dict.

0 голосов
/ 04 июня 2018

Строковые типы SQLAlchemy имеют перегрузки операторов, которые позволяют обрабатывать их так же, как и строки Python в этом случае (конкатенация строк), но создают выражения SQL:

session.query(
        Table,
        ("http://example.com/page/" + Table.pagename).label("pageUrl"))

Подробнее оПарадигма оператора SQLAlchemy здесь: http://docs.sqlalchemy.org/en/latest/core/tutorial.html#operators

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...