将旧表复制到新表,但在新表中略有差异



我有两个表,oldtable和newtable,

旧表看起来像:

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

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

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

假设我的旧表有几个以上的列,并且想要选择与where子句相关的所有记录,我如何在sqlalchemy中做到这一点?此外,在插入旧表的值之前,是否有必要像我在示例中所做的那样手动创建每个期望插入到newtable内部的列?

这样的东西应该是你想要的:

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()

相关内容

最新更新