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

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

Метод inline класса Insert указывает SQLAlchemy включить возврат значений прямо в основной INSERT-запрос. Метод не принимает параметров и возвращает новый объект Insert с установленным флагом inline. Такой подход позволяет получить сгенерированные значения (например, id) в одном запросе, без выполнения дополнительного SELECT. Это особенно удобно для СУБД, которые поддерживают конструкцию RETURNING, например PostgreSQL.

Синтаксис

insert(table).inline()

Пример

Давайте создадим таблицу articles и выполним вставку с методом inline, чтобы получить сгенерированный идентификатор:

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) ) metadata.create_all(engine) with engine.connect() as conn: stmt = insert(articles).inline().values( title='article', text='some text' ) res = conn.execute(stmt) print(res.inserted_primary_key)

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

(1,)

Пример

Давайте сравним поведение метода inline при вставке нескольких строк и выведем список полученных идентификаторов:

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) ) metadata.create_all(engine) with engine.connect() as conn: stmt = insert(articles).inline() res = conn.execute(stmt, [ {'title': 'article 1', 'text': 'text 1'}, {'title': 'article 2', 'text': 'text 2'}, {'title': 'article 3', 'text': 'text 3'} ]) print(res.inserted_primary_key_rows)

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

[(1,), (2,), (3,)]

Пример

Давайте используем метод inline вместе с методом returning для получения значения колонки title из вставленной строки:

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) ) metadata.create_all(engine) with engine.connect() as conn: stmt = insert(articles).inline().returning(articles.c.title) res = conn.execute(stmt, {'title': 'article', 'text': 'some text'}) print(res.fetchall())

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

[('article',)]

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

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