Регистрация звезды SELECT (*) @compiles для сопоставленных объектов класса в запросе sqlalchemy ORM - PullRequest
0 голосов
/ 03 февраля 2020

, поэтому у меня есть требование заменить отдельный выбор столбца, который sqlalchemy автоматически делает в своих запросах общим выбором звездочки (SELECT table.* FROM...) всякий раз, когда вся таблица или сопоставленный класс предоставляется Session.query(). Это не должно изменить способ компиляции InstrumentedAttribute объектов.

Так, например, для классов ORM Table1 и Table2:

str(s.query(Table1, Table2.col1, Table2.col2).select_from(Table1).join(Table2))

должны отображаться как:

SELECT table1.*, table2.col1, table2.col2
FROM table1
JOIN table2 ON table1.some_col = table2.some_other_col

Я прочитал документацию sqlalchemy на фабрике декораторов @compiles и попытался использовать ее в следующих конструкциях выражений с простой точкой останова:

sqlalchemy.sql.expression.ColumnCollection
sqlalchemy.sql.expression.ClauseList
sqlalchemy.sql.expression.ColumnElement
sqlalchemy.sql.expression.TableClause

так например:

@compiles(sqlalchemy.sql.expression.ColumnCollection)
def star_select(element, compiler, **kwargs):
    breakpoint()

но независимо от того, что из этого я передаю @compiles, поток выполнения никогда не переходит в функцию, которую я украсил @compiles. И я не могу найти других, которые, кажется, делают то, что я хочу.

Кто-нибудь знает, какой класс sqlalchemy мне нужно будет передать в функцию @compiles, чтобы переопределить только выбор столбца часть списка запроса выбора ORM?

Я чувствую, что схожу с ума от этого.

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