我正在尝试创建一个将多个表编译成一个表的表,这个新表将有一个列存储每行所来自的表的名称。
(我正在将来自不同时间窗口的多个时间序列结果编译到一个汇总表中,但时间序列标签必须作为一个新列包含在内)
我正在使用 pyscopg2
通过 python 将查询传递给 postgres,要作为文本存储的表名是在 Python 中创建并从 Python 传递的。
我的查询在一个独立的本地 postgres 数据库上运行,因此我不担心将表名作为参数传递。是的,我知道这是不好的形式,但现在我只需要让它正常工作。
我希望完成的伪代码:
INSERT INTO destination_table VALUES ('string of source table name', select * from source_table)
应该注意的是,目标表已使用正确的维度/数据类型创建以接受数据。
{}
中的名称是我从 python 传递的参数。
我尝试过的实际代码:
WITH upd as (SELECT many, columns, here… FROM {table_to_compile} where dep_count >=4)
INSERT INTO destination_table VALUES ('{table_to_compile}',(SELECT * from upd))
上面的代码返回一个错误,即“子选择查询应该只返回一列”
。
我已经使用 INSERT INTO
尝试了不同的组合,但我不会发布我测试过的每个查询,因为我希望我的目标已被清楚地描述。
最佳答案
您不能使用 values(expression, subquery)
,但您可以像这样向 select 添加常量:
INSERT INTO destination_table
select 'string of source table name' as column_name, *
from source_table;
关于python-3.x - 使用带有提供的文本字符串的 INSERT INTO 和来自另一个表的 select *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56687797/