Функция update
Функция update создает объект запроса
для обновления существующих записей в таблице.
Первым параметром функция принимает таблицу
или ORM-класс, к которому применяется обновление.
Метод where задает условие отбора строк,
а метод values - новые значения полей.
Синтаксис
update(table).where(condition).values(field=value)
Пример
Давайте обновим заголовок одной статьи
в таблице articles:
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', text='text', status='draft', num=1
))
stmt = (
update(articles)
.where(articles.c.id == 1)
.values(title='new article')
)
conn.execute(stmt)
res = conn.execute(articles.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'new article', 'text', 'draft', 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(), [
{'id': 1, 'title': 'article', 'text': 'text', 'status': 'draft', 'num': 1},
{'id': 2, 'title': 'article', 'text': 'text', 'status': 'draft', 'num': 2},
])
stmt = (
update(articles)
.where(articles.c.status == 'draft')
.values(status='published', num=10)
)
conn.execute(stmt)
res = conn.execute(articles.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article', 'text', 'published', 10), (2, 'article', 'text', 'published', 10)]
Пример
Давайте посмотрим, какой SQL-запрос
генерирует функция update:
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),
)
stmt = (
update(articles)
.where(articles.c.id == 1)
.values(title='article', status='published')
)
print(stmt)
Итоговый SQL запрос:
UPDATE articles SET title=?, status=? WHERE articles.id = ?