Класс Insert
Класс Insert представляет SQL-выражение
INSERT и используется для вставки новых строк
в таблицу базы данных. Экземпляр класса создается
автоматически при вызове метода insert у объекта
таблицы Table. Первым параметром метод
insert принимает саму таблицу, в которую будут
добавлены данные. Полученный объект Insert
передается в метод execute соединения для
выполнения запроса.
Синтаксис
table.insert()
Пример
Давайте создадим таблицу articles и вставим
в нее одну строку с помощью класса Insert:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
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 = articles.insert().values(
title='article',
text='some text',
status='draft',
num=1
)
with engine.connect() as conn:
res = conn.execute(stmt)
conn.commit()
print(res.inserted_primary_key)
Результат выполнения кода:
(1,)
Пример
Давайте вставим несколько строк за один вызов, передав список словарей:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
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 = articles.insert().values([
{'title': 'article', 'text': 'first', 'status': 'draft', 'num': 1},
{'title': 'article', 'text': 'second', 'status': 'published', 'num': 2}
])
with engine.connect() as conn:
conn.execute(stmt)
conn.commit()
res = conn.execute(select(articles.c.title, articles.c.num)).all()
print(res)
Результат выполнения кода:
[('article', 1), ('article', 2)]
Пример
Давайте вставим строку и сразу получим значение
первичного ключа с помощью метода returning:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
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 = articles.insert().values(
title='article',
text='with returning',
status='draft',
num=3
).returning(articles.c.id, articles.c.title)
with engine.connect() as conn:
res = conn.execute(stmt).one()
conn.commit()
print(res)
Результат выполнения кода:
(1, 'article')
Смотрите также
-
класс
Insert,
который представляет SQL-выражение INSERT -
метод
values,
который задает значения для вставляемых столбцов -
метод
returning,
который возвращает значения из вставленных строк -
метод
from_select,
который вставляет строки на основе SELECT-запроса