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

Метод refresh класса AsyncSession

Метод refresh класса AsyncSession повторно загружает данные объекта из базы данных, обновляя его атрибуты актуальными значениями. Первым параметром метод принимает экземпляр модели, который нужно обновить. Вторым необязательным параметром можно передать список атрибутов attribute_names, которые следует обновить. Также доступен параметр with_for_update для блокировки строки при чтении.

Синтаксис

await session.refresh(instance, [attribute_names], [with_for_update])

Пример

Давайте создадим асинхронную сессию, добавим объект и обновим его через метод refresh:

import asyncio from sqlalchemy import String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) async with AsyncSession(engine) as session: article = Article(title='article') session.add(article) await session.commit() print(article.title) await session.refresh(article) print(article.title) await engine.dispose() asyncio.run(main())

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

"article" "article"

Пример

Давайте обновим только определённый атрибут объекта, передав его имя в параметре attribute_names:

import asyncio from sqlalchemy import String from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) text: Mapped[str] = mapped_column(String(100)) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) async with AsyncSession(engine) as session: article = Article(title='article', text='text') session.add(article) await session.commit() await session.refresh(article, ['title']) print(article.title) print(article.text) await engine.dispose() asyncio.run(main())

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

"article" "text"

Пример

Давайте обновим объект, который был изменён в базе данных другим запросом:

import asyncio from sqlalchemy import String, update from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine class Base(DeclarativeBase): pass class Article(Base): __tablename__ = 'articles' id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(100)) async def main(): engine = create_async_engine('sqlite+aiosqlite:///:memory:') async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) async with AsyncSession(engine) as session: article = Article(title='article') session.add(article) await session.commit() print(article.title) await session.execute( update(Article).where(Article.id == article.id).values(title='user') ) await session.commit() await session.refresh(article) print(article.title) await engine.dispose() asyncio.run(main())

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

"article" "user"

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

  • класс AsyncSession,
    который представляет асинхронную сессию
  • метод flush,
    который синхронизирует состояние объектов с базой
  • метод expire,
    который помечает атрибуты объекта устаревшими
  • метод commit,
    который фиксирует текущую транзакцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить