Метод execution_options класса Update
Метод execution_options класса Update
позволяет задать опции выполнения для конкретного
оператора UPDATE. Первым параметром метод принимает
словарь с настройками, которые влияют на то, как
SQLAlchemy выполнит запрос. Эти опции не меняют
сам SQL-запрос, но управляют поведением драйвера
и соединения.
Синтаксис
update(table).execution_options(**kwargs)
Пример
Давайте создадим таблицу articles и обновим
запись, задав опцию synchronize_session:
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('status', String)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert().values(id=1, title='article 1', status='draft'))
stmt = (
update(articles)
.where(articles.c.id == 1)
.values(status='published')
.execution_options(synchronize_session=False)
)
res = conn.execute(stmt)
print(res.rowcount)
Результат выполнения кода:
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('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert().values(id=1, title='article', num=5))
stmt = (
update(articles)
.where(articles.c.id == 1)
.values(num=10)
.execution_options(
synchronize_session='fetch',
compile_cache=False
)
)
res = conn.execute(stmt)
print(res.rowcount)
Результат выполнения кода:
1