РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
250 of 711 menu

Метод from_select класса Insert

Метод from_select класса Insert создает INSERT-запрос, данные для которого берутся из результата другого SELECT-запроса. Это удобно, когда требуется перенести данные из одной таблицы в другую без промежуточной загрузки в Python. Первым параметром передается список имен целевых колонок, вторым - объект SELECT-запроса.

Синтаксис

Insert.from_select(names, select)

Пример

Давайте создадим две таблицы: articles и articles_archive. С помощью from_select перенесем строки из первой таблицы во вторую:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String) ) articles_archive = Table( 'articles_archive', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String) ) metadata.create_all(engine) with engine.begin() as conn: conn.execute( insert(articles), [ {'id': 1, 'title': 'article 1', 'text': 'text 1'}, {'id': 2, 'title': 'article 2', 'text': 'text 2'} ] ) select_stmt = select(articles.c.id, articles.c.title, articles.c.text) insert_stmt = insert(articles_archive).from_select( ['id', 'title', 'text'], select_stmt ) with engine.begin() as conn: conn.execute(insert_stmt) with engine.connect() as conn: res = conn.execute(select(articles_archive)).fetchall() print(res)

Результат выполнения кода:

[(1, 'article 1', 'text 1'), (2, 'article 2', 'text 2')]

Пример

Давайте посмотрим итоговый SQL-запрос, который генерирует метод from_select:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert, select metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String) ) articles_archive = Table( 'articles_archive', metadata, Column('id', Integer, primary_key=True), Column('title', String) ) select_stmt = select(articles.c.id, articles.c.title) insert_stmt = insert(articles_archive).from_select( ['id', 'title'], select_stmt ) print(insert_stmt)

Итоговый SQL запрос:

INSERT INTO articles_archive (id, title) SELECT articles.id, articles.title FROM articles

Смотрите также

  • класс Insert,
    который представляет INSERT-запрос
  • метод values,
    который задает значения для вставки
  • метод returning,
    который возвращает вставленные строки
  • метод inline,
    который включает INSERT прямо в SELECT
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить