Обновление данных в SQLAlchemy Core

Способы обновления данных в БД с SQLAlchemy Core

SQLAlchemy Core — это мощный инструмент для работы с SQL-запросами на чистом Python. Он обеспечивает высокий уровень абстракции от реального SQL, что позволяет нам выполнять различные операции с базой данных без погружения в детали каждой конкретной СУБД. В этой статье мы рассмотрим, как обновлять данные с помощью SQLAlchemy Core.

Основы обновления данных

from sqlalchemy import create_engine, MetaData, Table, update

engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
users = Table('users', metadata, autoload_with=engine)

upd = update(users).where(users.c.id == 1).values(name='Alex')
engine.connect().execute(upd)

В примере выше мы используем update() для создания запроса обновления. Метод where() определяет условие, при котором запись (или записи) будет обновлена, а values() указывает, какие именно столбцы следует обновить.

Обновление нескольких записей

upd = update(users).where(users.c.age < 30).values(status='young')
engine.connect().execute(upd)

Здесь мы обновляем столбец status для всех пользователей младше 30 лет. Если условие в where() совпадает с несколькими записями, все они будут обновлены.

Использование SQL-выражений при обновлении

from sqlalchemy import and_

upd = update(users).where(and_(users.c.age > 20, users.c.age < 30)).values(status='young adult')
engine.connect().execute(upd)

Используя функцию and_(), мы можем комбинировать несколько условий для более точного определения записей, которые необходимо обновить.

Обновление на основе другого столбца

from sqlalchemy import FetchedValue

upd = update(users).values(last_updated=FetchedValue())
engine.connect().execute(upd)

FetchedValue позволяет обновлять столбец на основе его текущего значения. Это может быть полезно, например, при обновлении временных меток.

Возвращение обновленных значений

Пример (для СУБД, поддерживающих эту функцию, например, PostgreSQL):

upd = update(users).where(users.c.id == 1).values(name='Alex').returning(users)
result = engine.connect().execute(upd)
print(result.fetchone())

Некоторые СУБД позволяют возвращать обновленные строки после выполнения операции обновления. Это может быть полезно для проверки, какие данные были фактически обновлены.

Заключение

Обновление данных — это основная операция, которую часто приходится выполнять при работе с базами данных. SQLAlchemy Core предоставляет мощные и гибкие инструменты для эффективного и безопасного обновления данных.

Содержание: