Класс Update
Класс Update представляет собой выражение
SQL UPDATE и используется для изменения
существующих строк в таблице. Первым параметром
при передаче в функцию update идет таблица,
к которой применяется обновление. Объект Update
позволяет задать новые значения через метод
values, условие отбора строк через метод
where и возвращаемые данные через метод
returning.
Синтаксис
from sqlalchemy import update
stmt = update(table).values(column=value).where(condition)
Пример
Давайте создадим таблицу articles и обновим
заголовок статьи с идентификатором 1:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, update
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)
with engine.connect() as conn:
conn.execute(articles.insert().values(id=1, title='article', status='draft', num=1))
stmt = update(articles).where(articles.c.id == 1).values(title='article updated')
res = conn.execute(stmt)
print(res.rowcount)
Результат выполнения кода:
1
Пример
Давайте обновим сразу несколько колонок и выведем
обновленную строку через метод returning:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, update
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)
with engine.connect() as conn:
conn.execute(articles.insert().values(id=1, title='article', status='draft', num=1))
stmt = (
update(articles)
.where(articles.c.id == 1)
.values(status='published', num=2)
.returning(articles.c.title, articles.c.status)
)
res = conn.execute(stmt)
print(res.fetchall())
Результат выполнения кода:
[('article', 'published')]
Пример
Давайте посмотрим итоговый SQL-запрос, который
генерирует объект Update:
from sqlalchemy import Table, Column, Integer, String, MetaData, update
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer),
)
stmt = update(articles).where(articles.c.id == 1).values(title='article updated', status='published')
print(stmt)
Итоговый SQL запрос:
UPDATE articles SET title = :title, status = :status WHERE articles.id = :id_1