, поэтому у меня есть требование заменить отдельный выбор столбца, который 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?
Я чувствую, что схожу с ума от этого.