Метод values класса Update
Метод values класса Update задает значения,
которые будут присвоены столбцам таблицы при выполнении
UPDATE-запроса. Первым параметром метод принимает
именованные аргументы, где ключ - это имя столбца,
а значение - новое значение для этого столбца.
Метод возвращает новый объект Update,
что позволяет строить цепочки вызовов.
Синтаксис
update(table).values(**kwargs)
Пример
Давайте создадим таблицу articles и обновим
значение столбца title для всех строк:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy import 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 1', 'text': 'text 1', 'status': 'draft', 'num': 10},
{'id': 2, 'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 20}
])
stmt = update(articles).values(title='article')
conn.execute(stmt)
res = conn.execute(articles.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article', 'text 1', 'draft', 10), (2, 'article', 'text 2', 'draft', 20)]
Пример
Давайте обновим сразу несколько столбцов, передав их
в метод values:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy import 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 1', 'text': 'text 1', 'status': 'draft', 'num': 10}
])
stmt = update(articles).values(
title='article',
status='published',
num=100
)
conn.execute(stmt)
res = conn.execute(articles.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article', 'text 1', 'published', 100)]
Пример
Давайте используем в values выражение столбца,
например, увеличим значение num на 5:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
from sqlalchemy import 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 1', 'text': 'text 1', 'status': 'draft', 'num': 10}
])
stmt = update(articles).values(num=articles.c.num + 5)
conn.execute(stmt)
res = conn.execute(articles.select()).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article 1', 'text 1', 'draft', 15)]
Смотрите также
-
класс
Update,
который представляет UPDATE-запрос -
метод
where,
который задает условие для обновляемых строк -
метод
returning,
который возвращает обновленные строки -
метод
ordered_values,
который задает значения в определенном порядке