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

Исключение TimeoutError

Исключение TimeoutError в SQLAlchemy возникает, когда операция с базой данных превышает заданное время ожидания. Оно наследуется от класса SQLAlchemyError и является частью группы ошибок уровня СУБД. Обычно исключение выбрасывается при блокировке таблиц, недоступности сервера или превышении таймаута пула соединений.

Синтаксис

from sqlalchemy.exc import TimeoutError TimeoutError(statement, params, orig)

Исключение принимает необязательные параметры statement, params и orig, которые содержат SQL-запрос, его параметры и исходную ошибку драйвера соответственно.

Пример

Давайте попробуем получить соединение из пула с нулевым таймаутом и перехватим исключение:

from sqlalchemy import create_engine from sqlalchemy.exc import TimeoutError engine = create_engine( 'sqlite:///:memory:', pool_size=1, pool_timeout=0 ) conn1 = engine.connect() try: conn2 = engine.connect() except TimeoutError as exc: print('TimeoutError:', exc) conn1.close()

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

"TimeoutError: QueuePool limit of size 1 overflow 0 reached, connection timed out, timeout 0.00"

Пример

Давайте выполним запрос к таблице articles с малым таймаутом блокировки и посмотрим на обработку исключения:

from sqlalchemy import create_engine, text from sqlalchemy.exc import TimeoutError engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(text('CREATE TABLE articles (id INTEGER, title TEXT)')) conn.execute(text("INSERT INTO articles VALUES (1, 'article')")) conn.commit() try: res = conn.execute( text('SELECT * FROM articles'), execution_options={'timeout': 0} ) print(res.fetchall()) except TimeoutError as exc: print('Statement timeout:', exc)

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

SELECT * FROM articles

Пример

Давайте проверим, как исключение обрабатывается вместе с базовым классом SQLAlchemyError:

from sqlalchemy import create_engine from sqlalchemy.exc import SQLAlchemyError, TimeoutError engine = create_engine( 'sqlite:///:memory:', pool_size=1, pool_timeout=0 ) conn1 = engine.connect() try: conn2 = engine.connect() except SQLAlchemyError as exc: print('Caught as SQLAlchemyError') print('Is TimeoutError:', isinstance(exc, TimeoutError)) conn1.close()

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

"Caught as SQLAlchemyError" "Is TimeoutError: True"

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

  • класс SQLAlchemyError,
    базовый класс всех исключений SQLAlchemy
  • класс DBAPIError,
    обертка над ошибками драйвера базы данных
  • класс DisconnectionError,
    исключение при разрыве соединения с базой
  • класс OperationalError,
    исключение при ошибках работы СУБД
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить