Создавайте таблицы, используя SELECT INTO

Как выполнить следующий необработанный запрос с помощью SQLAlchemy?

SELECT *
INTO <table-1>
FROM <table-2>
WHERE condition=<1>

Я работаю с сервером Microsoft SQL. И когда я запускаю это

import sqlalchemy as sqla

engine_string = "mssql://%s/%s?driver=%s" % (server_name, database_name, driver)
con = sqla.create_engine(engine_string)
query_str = <above-query>
con.execute(query)

Он выполняется без ошибок, но таблица не создается. Что тут происходит?


person TrigonaMinima    schedule 27.11.2017    source источник
comment
Вы хотите создать таблицу? Этот SQL является запросом выбора. Возможно, вы захотите изучить оператор CREATE TABLE.   -  person Isma    schedule 27.11.2017
comment
Пробовали ли вы обозначить схему, как показано в ответе на этот вопрос: table" title="как создать таблицу на основе другой таблицы"> stackoverflow.com/questions/18254104/   -  person brddawg    schedule 27.11.2017
comment
@Isma Запрос, который я написал, работает на MS SQL Server. Он помещает результаты запроса select в упомянутую таблицу.   -  person TrigonaMinima    schedule 27.11.2017
comment
@brddawg Запрос запускается и создает таблицу, когда я запускаю его непосредственно в студии управления сервером MS SQL. Я хочу создать его с помощью sqlalchemy.   -  person TrigonaMinima    schedule 27.11.2017
comment
Вы правы, таблица должна создаваться автоматически. Возможно, этот ответ поможет: stackoverflow.com/questions/30575111/   -  person Isma    schedule 27.11.2017
comment
Я наткнулся на этот ответ в своем поиске. Это казалось слишком сложным, чтобы сделать такую ​​простую вещь. Обычные запросы выбора работают правильно, как я выполняю, поэтому я надеялся, что это тоже сработает. Не имеет значения, не возвращаются ли строки.   -  person TrigonaMinima    schedule 27.11.2017
comment
Имя table-1 начинается со знака # (для временной таблицы)?   -  person Wagner DosAnjos    schedule 28.11.2017
comment
@wdosanjos нет. Это вопрос для другого вопроса, я думаю. Я даже не смог запустить запрос на выборку из временной таблицы через sqlalchemy. Вот почему я начал делать постоянный стол.   -  person TrigonaMinima    schedule 28.11.2017
comment
Причина, по которой ваш исходный текстовый SQL не работает, заключается в том, что он никогда не фиксируется. Прочтите ознакомление с автофиксацией. Вкратце: SQLAlchemy проверяет текстовый оператор SQL, видит, что он начинается с SELECT, и считает, что он не изменяет данные. И, пожалуйста, переименуйте con в engine.   -  person Ilja Everilä    schedule 29.11.2017
comment
@IljaEverilä, кажется, в правильном направлении. Я попробую это с autocommit=False и отчитаюсь. И да, даже не заметил часть con. Изменит это в моем коде. :)   -  person TrigonaMinima    schedule 29.11.2017
comment
Если вы используете Engine.execute(), попробуйте обернуть текст SQL кодом text(query).execution_options(autocommit=True), который информирует механизм автоматической фиксации о том, что этот оператор должен быть зафиксирован.   -  person Ilja Everilä    schedule 29.11.2017
comment
@IljaEverilä вышеуказанный метод работает. Должен ли я удалить этот вопрос?   -  person TrigonaMinima    schedule 30.11.2017
comment
Решение находится здесь.   -  person LoMaPh    schedule 09.12.2020