Функция insert
Функция insert создает выражение для вставки данных
в таблицу базы данных. Первым параметром функция принимает
таблицу или ORM-класс. Вторым параметром можно передать
значения для вставки. Функция возвращает объект выражения,
который можно выполнить через соединение или сессию.
Синтаксис
insert(table)
insert(table).values(**values)
Пример
Давайте создадим таблицу и вставим в нее одну строку
с помощью функции insert:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, 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='some text',
status='published',
num=1
)
with engine.connect() as conn:
res = conn.execute(stmt)
conn.commit()
print(res.inserted_primary_key)
Результат выполнения кода:
(1,)
Пример
Давайте вставим сразу несколько строк, передав список
словарей в метод values:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, 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 1', 'text': 'text 1', 'status': 'published', 'num': 1},
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 2},
{'title': 'article 3', 'text': 'text 3', 'status': 'published', 'num': 3}
])
with engine.connect() as conn:
res = conn.execute(stmt)
conn.commit()
print(res.rowcount)
Результат выполнения кода:
3
Пример
Давайте выполним вставку с помощью ORM-сессии, используя ORM-класс вместо таблицы:
from sqlalchemy import create_engine, Integer, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
from sqlalchemy import insert
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String)
text: Mapped[str] = mapped_column(String)
status: Mapped[str] = mapped_column(String)
num: Mapped[int] = mapped_column(Integer)
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
stmt = insert(Article).values(
title='article',
text='some text',
status='published',
num=1
)
with Session(engine) as session:
res = session.execute(stmt)
session.commit()
print(res.inserted_primary_key)
Результат выполнения кода:
(1,)