Использование INSERT INTO с предоставленной текстовой строкой и выбором * из другой таблицы - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать таблицу, которая объединяет несколько таблиц в одну, и в этой новой таблице будет столбец, в котором хранится имя таблицы, из которой получена каждая строка.

(я компилирую несколько раз-серии результатов из разных временных окон в одну сводную таблицу, но метка временного ряда должна быть включена в качестве нового столбца)

Я использую pyscopg2 для передачи запросов в 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))

Приведенный выше код возвращает ошибку, "the sub selection query should only return one column".

Я пробовал разные комбинации, используя INSERT INTO, но я буду воздерживаться от публикации каждого протестированного мной запроса, так как надеюсь, что моя цель была четко описана.

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Вы не можете использовать values(expression, subquery), но вы можете добавить константу к выбору следующим образом:

INSERT INTO destination_table
select 'string of source table name' as column_name, * 
from source_table;
0 голосов
/ 25 июня 2019

Итак, вы говорите: «Я пытаюсь создать таблицу, которая объединяет несколько таблиц в одну», для меня это звучит как запрос на объединение. Чтобы вставить в 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 в оператор cursor.execute.

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