Errors¶
Every exception dbkit raises is a subclass of DatabaseError, normalized from the underlying
driver/SQLAlchemy exception via SQLSTATE-first classification (see docs/requirements.md
§13). Bound parameters and DSNs are never present in error messages (§29).
errors ¶
Public re-export of the dbkit error model. See :mod:dbkit._core.errors.
DatabaseCancellationError ¶
DatabaseCancellationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
Bases: DatabaseError
The operation was cancelled (e.g. by asyncio task cancellation or a client timeout).
DatabaseCheckViolationError ¶
DatabaseCheckViolationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseCircuitOpenError ¶
DatabaseCircuitOpenError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
Bases: DatabaseError
The circuit breaker for this database/shard/role is open; the call was short-circuited.
DatabaseCommitUnknownError ¶
Bases: DatabaseError
Commit outcome is genuinely unknown — do not retry unless idempotent (§15).
Always marks transaction_state_unknown/connection_invalidated (§15).
DatabaseConfigurationError ¶
DatabaseConfigurationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
Bases: DatabaseError
Invalid or missing configuration, raised at startup before any connection is made.
DatabaseConnectionError ¶
DatabaseConnectionError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseDeadlockError ¶
DatabaseDeadlockError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseError ¶
DatabaseError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
Bases: Exception
Base class for every error dbkit raises (§13.1).
Attributes are populated by the classifier or by the raising call site. original
holds the underlying exception for internal inspection; it is never rendered into the
user-facing message.
Any keyword left None falls back to the subclass default or is left unset.
original and the routing/query context fields are for internal inspection and
logging — never interpolated into the exception message itself (§13.4, §29).
with_context ¶
with_context(
*,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
) -> DatabaseError
Attach routing/query context discovered by an outer layer. Returns self.
DatabaseForeignKeyViolationError ¶
DatabaseForeignKeyViolationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseIntegrityError ¶
DatabaseIntegrityError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseLockTimeoutError ¶
DatabaseLockTimeoutError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseMappingError ¶
DatabaseMappingError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseNotNullViolationError ¶
DatabaseNotNullViolationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseOverloadedError ¶
DatabaseOverloadedError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabasePermissionError ¶
DatabasePermissionError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabasePoolTimeoutError ¶
DatabasePoolTimeoutError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
Bases: DatabaseError
No pooled connection became available before the pool checkout timeout elapsed.
DatabaseProgrammingError ¶
DatabaseProgrammingError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseQueryTimeoutError ¶
DatabaseQueryTimeoutError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseReadOnlyError ¶
DatabaseReadOnlyError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseResultError ¶
DatabaseResultError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseRoutingError ¶
DatabaseRoutingError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseSerializationError ¶
DatabaseSerializationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseSyntaxError ¶
DatabaseSyntaxError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseTransactionError ¶
DatabaseTransactionError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseUnavailableError ¶
DatabaseUnavailableError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseUniqueViolationError ¶
DatabaseUniqueViolationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
DatabaseUnsupportedOperationError ¶
DatabaseUnsupportedOperationError(
message: str = "",
*,
code: str | None = None,
category: ErrorCategory | None = None,
retryable: bool | None = None,
connection_invalidated: bool = False,
transaction_state_unknown: bool = False,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
query_name: str | None = None,
sqlstate: str | None = None,
original: BaseException | None = None,
)
Bases: DatabaseError
The requested operation isn't supported by the current dialect/driver/configuration.
ErrorCategory ¶
Bases: Enum
Coarse grouping used for metrics labels and retry/circuit-breaker decisions.
classify ¶
classify(
exc: BaseException,
*,
query_name: str | None = None,
database_name: str | None = None,
shard_id: str | None = None,
role: str | None = None,
) -> e.DatabaseError
Normalize any exception into a :class:DatabaseError with context attached.
is_connection_error ¶
Whether exc indicates the connection itself is broken, not just a query failure (§15).
Used to decide whether a failure during COMMIT means the outcome is genuinely unknown
(§15) — prefers SQLAlchemy's own per-dialect disconnect detection
(connection_invalidated, computed by each dialect's is_disconnect() when it wraps
the driver exception) over a blanket OperationalError check — OperationalError also
covers many transient-but-not-disconnected conditions (e.g. some lock/resource errors),
which would otherwise over-classify ordinary failures as commit-unknown.
redact_dsn ¶
Redact the password in a URL/DSN while keeping it recognizable for debugging.
redact_params ¶
redact_params(
params: Mapping[str, Any] | None,
*,
sensitive: set[str] | None = None,
) -> dict[str, Any]
Return a copy of params with sensitive values replaced by ***.
A key is redacted if it is named in sensitive (from Query.sensitive_parameters)
or if it matches a built-in secret-ish hint.
sanitize_message ¶
Strip DSN passwords out of a free-form error/driver message.
error_class_for_sqlstate ¶
Return the dbkit error class for a SQLSTATE, or None if unrecognized.