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

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

Метод execution_options класса Insert задает параметры выполнения для конкретного INSERT-запроса. Он принимает именованные аргументы, которые влияют на то, как диалект СУБД выполнит вставку данных. Метод возвращает новый объект Insert с обновленными опциями, поэтому его можно вызывать в цепочке с другими методами.

Наиболее часто используемыми опциями являются synchronize_session для ORM-вставок и populate_existing. Параметры execution_options не сохраняются в самом объекте запроса навсегда, а применяются только к текущему выполнению.

Синтаксис

insert(table).execution_options(**kwargs)

Пример

Давайте создадим таблицу и выполним вставку с опцией synchronize_session:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) stmt = insert(articles).values( title='article', text='article text', status='draft', num=1 ).execution_options(synchronize_session='fetch') with engine.connect() as conn: res = conn.execute(stmt) print(res.inserted_primary_key)

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

[1]

Пример

Давайте передадим несколько опций одновременно, включая populate_existing:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) stmt = insert(articles).values( title='article', text='article text', status='published', num=2 ).execution_options( synchronize_session='evaluate', populate_existing=True ) with engine.connect() as conn: res = conn.execute(stmt) print(res.inserted_primary_key)

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

[1]

Пример

Давайте убедимся, что метод возвращает новый объект Insert, а исходный запрос остается без изменений:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy import insert engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('text', String), Column('status', String), Column('num', Integer) ) metadata.create_all(engine) base_stmt = insert(articles).values( title='article', text='article text', status='draft', num=3 ) opts_stmt = base_stmt.execution_options(synchronize_session='fetch') print(base_stmt is opts_stmt) print(base_stmt._execution_options) print(opts_stmt._execution_options)

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

False immutabledict({}) immutabledict({'synchronize_session': 'fetch'})

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

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