我可以使用.select()
将CTE或Alias转换为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的函数。
答案 0 :(得分:0)
结果正是有一个名为original
的属性。
table_cte.original == table_select
table_select.alias().original == table_select
都返回True。