如何从select中插入sqlalchemy,并指定列

如何从select中插入sqlalchemy,并指定列,sqlalchemy,Sqlalchemy,这个问题与以下问题有关: 但是我想指定insert应该处理哪些列。也就是说,我希望sqlalchemy生成一个与 插入t1(col1、col2、col3)从t2中选择x、y、z 我查看了编译文档,但不清楚如何修改以指定列名。以下修改可能会有所帮助: from sqlalchemy.ext.compiler import compiles from sqlalchemy.sql.expression import Executable, ClauseElement class InsertFr

这个问题与以下问题有关:

但是我想指定insert应该处理哪些列。也就是说,我希望sqlalchemy生成一个与

插入t1(col1、col2、col3)从t2中选择x、y、z


我查看了编译文档,但不清楚如何修改以指定列名。

以下修改可能会有所帮助:

from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import Executable, ClauseElement

class InsertFromSelect(Executable, ClauseElement):
    def __init__(self, table, columns, select):
        self.table = table
        self.columns = columns
        self.select = select

@compiles(InsertFromSelect)
def visit_insert_from_select(element, compiler, **kw):
    return "INSERT INTO %s (%s) %s" % (
        compiler.process(element.table, asfrom=True),
        ", ".join(element.columns), # @note: not a very safe/robust way to compose SQL
        compiler.process(element.select)
    )

insert = InsertFromSelect(
        t1,
        ("col1", "col2", "col3",),
        select([t2.c.x, t2.c.y, t2.c.z])
        )
print insert