问题描述
我想使用 sqlAlchemy 根据 CTE 的结果创建一个临时表。
表格定义:
class Data(Base):
__tablename__ = 'data'
c_id = Column(Integer,primary_key=True)
# ...
# temp table
class CIdTmp(Base):
__tablename__ = '#c_id_tmp'
c_id = Column(Integer,primary_key=True)
这是我的 CTE:
c_id_cte = (session.query(Data.c_id)).cte('c_id_cte')
我尝试将 insert()
与 from_select()
像这样组合:
session.execute(CIdTmp.insert().from_select(['c_id'],c_id_cte))
但它产生了这个错误:
AttributeError: type object 'CIdTmp' has no attribute 'insert'
解决方法
好的,我发现我必须获得一个 Table
对象才能执行 insert
表达式。可以通过在我的模型上使用 ___table__
来完成。
session.execute(CIdTmp.__table__.insert().from_select(['c_id'],c_id_cte))