Python 3.x 将INSERT INTO与提供的文本字符串和select*一起使用

Python 3.x 将INSERT INTO与提供的文本字符串和select*一起使用,python-3.x,postgresql,psycopg2,Python 3.x,Postgresql,Psycopg2,我试图创建一个将多个表编译成一个表的表,这个新表将有一个列,其中存储每行来源的表的名称 (我正在将来自不同时间窗口的多个时间序列结果编译到一个汇总表中,但时间序列标签必须作为新列包含) 我使用pyscopg2通过python将查询传递给postgres,并在python中创建并传递要存储为文本的表名 我的查询运行在一个孤立的本地postgres数据库上,因此我不担心将表名作为参数传递。是的,我知道这是一个糟糕的形式,但现在我只需要让它工作 我希望实现的伪代码: INSERT INTO desti

我试图创建一个将多个表编译成一个表的表,这个新表将有一个列,其中存储每行来源的表的名称

(我正在将来自不同时间窗口的多个时间序列结果编译到一个汇总表中,但时间序列标签必须作为新列包含)

我使用
pyscopg2
通过python将查询传递给postgres,并在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 destination_table
select 'string of source table name' as column_name, * 
from source_table;
您不能使用
值(表达式、子查询)
,但您可以向select添加一个常量,如下所示:

INSERT INTO destination_table
select 'string of source table name' as column_name, * 
from source_table;

所以,您说“我正在尝试创建一个将多个表编译成一个表的表”,这听起来像是一个联合查询。插入SQL Server(仅举一个例子;我认为您没有指定要处理的数据库)。下面是一个执行插入的简单示例脚本

import pyodbc
user='sa'
password='PC#1234'
database='climate'
port='1433'
TDS_Version='8.0'
server='192.168.1.103'
driver='FreeTDS'

   con_string='UID=%s;PWD=%s;DATABASE=%s;PORT=%s;TDS=%s;SERVER=%s;driver=%s' % (user,password, database,port,TDS_Version,server,driver)
   cnxn=pyodbc.connect(con_string)
   cursor=cnxn.cursor()
   cursor.execute("INSERT INTO mytable(name,address) VALUES (?,?)",('thavasi','mumbai'))
   cnxn.commit() 
要进行联合,只需将正确的SQL语法替换为
游标。执行
语句

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2

所以,您说“我正在尝试创建一个将多个表编译成一个表的表”,这听起来像是一个联合查询。插入SQL Server(仅举一个例子;我认为您没有指定要处理的数据库)。下面是一个执行插入的简单示例脚本

import pyodbc
user='sa'
password='PC#1234'
database='climate'
port='1433'
TDS_Version='8.0'
server='192.168.1.103'
driver='FreeTDS'

   con_string='UID=%s;PWD=%s;DATABASE=%s;PORT=%s;TDS=%s;SERVER=%s;driver=%s' % (user,password, database,port,TDS_Version,server,driver)
   cnxn=pyodbc.connect(con_string)
   cursor=cnxn.cursor()
   cursor.execute("INSERT INTO mytable(name,address) VALUES (?,?)",('thavasi','mumbai'))
   cnxn.commit() 
要进行联合,只需将正确的SQL语法替换为
游标。执行
语句

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2

只是一个提示,要执行代码块,请使用
esc
键正下方的`。不是
。这通常会让新用户无法降价。谢谢你的提示!我现在正在努力学习一门外语知识库,但仍在摸索。提示一下,要使用代码块,请使用
esc
键正下方的`。不是
。这通常会让新用户无法降价。谢谢你的提示!我现在正在努力学习外语知识库,但仍在摸索。谢谢,你的回答几乎是完美的解决方案。我不得不从你发布的结构中删除单词VALUES,然后它就开始工作了。非常感谢。这就是在没有测试的情况下编写建议的问题。我会编辑答案,然后你可以接受。谢谢,你的答案几乎是完美的修复。我不得不从你发布的结构中删除单词VALUES,然后它就开始工作了。非常感谢。这就是在没有测试的情况下编写建议的问题。我会编辑答案,然后你可以接受。嗨,阿舍,谢谢你的回复,但问题已经解决了。我的挑战不是合并表,而是将作为静态文本字符串插入的表的名称插入到新表中其各自的列中@Coladict提供了上面的正确代码。诚然,这是基本的SQL知识,但我想自学意味着缺少一些像这样的基本技巧。另外,仅供参考,帖子上的“标签”指定了我正在使用的DB软件。@Marshall我在接受正式教育之前是自学的,但真正的学习需要在现实世界实践中达到这样的要求,有时还需要随机实验。嗨,Asher,谢谢你的回答,但问题已经解决了。我的挑战不是合并表,而是将作为静态文本字符串插入的表的名称插入到新表中其各自的列中@Coladict提供了上面的正确代码。诚然,这是基本的SQL知识,但我想自学意味着缺少一些像这样的基本技巧。另外,仅供参考,帖子上的“标签”指定了我正在使用的DB软件。@Marshall我在接受正式教育之前是自学的,但真正的学习需要在现实世界实践中达到这样的要求,有时还需要随机实验。