РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
257 of 711 menu

Метод ordered_values класса Update

Метод ordered_values класса Update задает значения для обновления строк таблицы с сохранением порядка их передачи. В отличие от метода values, который принимает словарь и не гарантирует порядок параметров, метод ordered_values принимает пары «ключ-значение» в виде кортежей, и они попадают в SQL-запрос ровно в том порядке, в котором были указаны. Метод первым аргументом принимает переменное число кортежей вида (column, value).

Синтаксис

update(table).ordered_values((column1, value1), (column2, value2), ...)

Пример

Давайте создадим таблицу articles и обновим сразу несколько полей, сохранив порядок столбцов:

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, 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.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'text': 'text 1', 'status': 'new', 'num': 1}, {'id': 2, 'title': 'article 2', 'text': 'text 2', 'status': 'new', 'num': 2}, ]) stmt = ( update(articles) .where(articles.c.id == 1) .ordered_values( (articles.c.title, 'article updated'), (articles.c.status, 'done'), (articles.c.num, 10), ) ) res = conn.execute(stmt) print(res.rowcount)

Результат выполнения кода:

1

Пример

Давайте посмотрим, какой SQL-запрос генерирует метод ordered_values:

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, update from sqlalchemy.dialects import sqlite 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) .ordered_values( (articles.c.title, 'article updated'), (articles.c.status, 'done'), (articles.c.num, 10), ) ) print(stmt.compile(dialect=sqlite.dialect()))

Итоговый SQL запрос:

UPDATE articles SET title = ?, status = ?, num = ? WHERE articles.id = ?

Смотрите также

  • класс Update,
    который представляет оператор обновления данных
  • метод values,
    который задает значения для обновления через словарь
  • метод where,
    который задает условие отбора обновляемых строк
  • метод returning,
    который возвращает значения измененных строк
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить