我有两个表,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内的每一列?就像我在示例中所做的那样?
答案 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()