Я могу превратить CTE или Alias в Select, используя .select()
, но такие выражения, как table.select().alias().select().cte().select().alias().select()
, приводят к излишне длинному скомпилированному SQL.Есть ли лучший способ инвертировать / отменять операции .alias()
и / или .cte()
?
Я строю запросы, которые зависят от общих подзапросов с использованием ядра sqlalchemy, и хочу легко получить доступ к подзапросу какCTE (для объединения и использования его в качестве подзапроса) и в качестве операторов Select (для непосредственного выполнения).Я надеюсь достичь этого без необходимости отслеживать как исходный подзапрос, так и вывод query.cte()
параллельно.
# preliminary setup
import pandas
from sqlalchemy import MetaData, create_engine, Table
engine = create_engine('sqlite:///')
pandas.DataFrame(data={'A': [1,2,3]}).to_sql('table1', engine, index=False)
table = Table('table1', MetaData(bind=engine), autoload=True)
# end of preliminary setup
table_select = table.select()
table_cte = table_select.cte()
print table_cte.select() # works but lengthier than necessary
print table_select # desired output
Короче говоря, я хотел бы иметь функцию, которая принимает table_cteв качестве входа и выхода table_select.