【发布时间】:2012-03-24 12:23:39
【问题描述】:
我可以这样创建一个临时表:
session.execute("CREATE TABLE temptable SELECT existingtable.id, "
"existingtable.column2 FROM existingtable WHERE existingtable.id<100000")
但新表不可读,因为它说它没有主键。 existingtable.id 是现有表的主键,所以我希望它在临时表中得到相同的处理。
但是,无论如何,我宁愿找到一些 ORM 方式来做到这一点。给定:
temp_table = Table('temptable', metadata,
Column('id', Integer, primary_key=True),
Column('column2', Integer),
useexisting=True )
class TempTable(object):
pass
mapper(TempTable, temp_table)
temp_table.create(bind=session.bind, checkfirst=True)
if session.query(TempTable).delete(): #make sure it's empty
session.commit()
如何在不执行 100000 session.query.add(TempTable(...)) 命令的情况下使用 existingtable 的某些选定内容填充 temp_table?或者有没有一种方法可以从类似于上面的普通 SQL 版本的查询中创建表?
【问题讨论】:
-
只是古玩..如果您使用第一种方法创建临时表的定义,它会起作用吗?例如 create table tablename (id primarykey, column1) Insert into tablename select id, column2 from existing table where...
-
@AJP 是的,我认为这就是答案。不幸的是,没有相当于 INSERT INTO 的 SA ORM,而且我也没有简单的方法将相对复杂的查询编译成 sql 语句。
标签: python sql sqlalchemy