使用 SQLAlchemy 插入临时表

问题描述

我想使用 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))