将oldtable复制到newtable,并在newtable中略有不同?

时间:2015-02-20 19:10:55

标签: python postgresql sqlalchemy flask-sqlalchemy

我有两个表,oldtable和newtable,

oldtable看起来像:

 id  | type | name 
 ----+------+------
  1  |    1 | dog
  2  |    2 | bird
  3  |    1 | cat

我希望newtable有自己的id字段,我希望插入所有oldtable的字段(包括其id,在newtable中重命名为parent_id,基于type = 1的约束)。在postgres中,我手动创建了列" id,parent_id,type,name"然后在newtable内部做了:

INSERT INTO newtable (id, parent_id, type, name)
SELECT nextval('newtable_id_seq'), id, type, name
FROM oldtable WHERE type=1;

导致(按预期):

id  | parent_id | type | name
----+-----------+------+------
 1  |         1 |    1 | dog
 2  |         3 |    1 | cat

我如何在sqlalchemy中执行此操作,假设我的oldtable有多个列并且想要选择与where子句相关的所有记录?另外,在插入oldtable的值之前,是否有必要手动创建预期插入newtable内的每一列?就像我在示例中所做的那样?

1 个答案:

答案 0 :(得分:0)

这样的事情应该是你正在寻找的东西:

oldTypeOnes = session.query(oldTable).filter(oldTable.type == 1).all()

for oldTypeOne in oldTypeOnes:
    session.add(newTable(parent_id=oldTypeOne.id, type=oldTypeOne.type, \
        name=oldTypeOne.name))

session.commit()