oslo_db 包

子包

子模块

oslo_db.api 模块

多数据库 API 后端支持。

数据库后端模块应实现名为 'get_backend' 的方法,该方法不接受任何参数。该方法可以返回实现 DB API 方法的任何对象。

class oslo_db.api.DBAPI(backend_name, backend_mapping=None, lazy=False, **kwargs)

基类: object

初始化选定的数据库 API 后端。

初始化后,API 方法可作为 DBAPI 子类的普通属性使用。数据库 API 方法应作为 DBAPI 实例方法调用。

参数:
  • backend_name (str) – 要加载的后端名称

  • backend_mapping (dict) – 后端名称 -> 要加载的模块/类映射

  • lazy (bool) – 在首次调用 DB API 方法时延迟加载 DB 后端

  • use_db_reconnect (bool) – 是否在断开连接时重试 DB 事务

  • retry_interval (int) – 重试事务之间的秒数

  • inc_retry_interval (bool) – 是否增加重试间隔

  • max_retry_interval (int) – 重试之间的最大间隔值

  • max_retries (int) – 引发错误之前的最大重试次数

默认 backend_mapping:

默认 lazy:

False

classmethod from_config(conf, backend_mapping=None, lazy=False)

给定配置实例初始化 DBAPI 实例。

参数:
  • conf (oslo.config.cfg.ConfigOpts) – oslo.config 配置实例

  • backend_mapping (dict) – 后端名称 -> 要加载的模块/类映射

  • lazy (bool) – 在首次调用 DB API 方法时延迟加载 DB 后端

oslo_db.api.retry_on_deadlock(f)

如果收到 Deadlock,则重试 DB API 调用。

wrap_db_entry 将应用于用此装饰器标记的所有 db.api 函数。

oslo_db.api.retry_on_request(f)

如果收到 RetryRequest 异常,则重试 DB API 调用。

wrap_db_entry 将应用于用此装饰器标记的所有 db.api 函数。

oslo_db.api.safe_for_db_retry(f)

指示 API 方法对于重新连接到数据库是安全的。

将为装饰的 API 方法启用数据库连接重试。数据库连接失败的原因可能有很多,其中一些可能是暂时的。在这种情况下,重试可能会增加连接的可能性。

用法

@safe_for_db_retry
def api_method(self):
    self.engine.connect()
参数:

f (function.) – 数据库 API 方法。

class oslo_db.api.wrap_db_retry(retry_interval=1, max_retries=20, inc_retry_interval=True, max_retry_interval=10, retry_on_disconnect=False, retry_on_deadlock=False, exception_checker=<function wrap_db_retry.<lambda>>, jitter=False)

基类: object

如果引发 db_error,则重试 db.api 方法

重试装饰的 db.api 方法。此装饰器捕获 db_error 并循环重试函数,直到成功,或直到达到最大重试次数。

关键字参数

参数:
  • retry_interval (int or float) – 重试事务之间的秒数

  • max_retries (int) – 引发错误之前的最大重试次数

  • inc_retry_interval (bool) – 确定是否增加重试间隔

  • max_retry_interval (int or float) – 重试之间的最大间隔值

  • exception_checker (callable) – 检查是否应引发异常以触发重试

  • jitter (bool) – 确定是否增加重试间隔使用抖动,对于 DBDeadlockError,抖动始终解释为 True

oslo_db.exception 模块

数据库相关的自定义异常。

旨在确定特定数据库错误原因的自定义异常。此模块提供比特定数据库驱动程序库更通用的异常,因此 oslo.db 的用户可以捕获这些异常,而不管应用程序使用的是哪种数据库。大多数异常都是包装器。包装器异常将原始异常作为位置参数,并保留它以供进一步调试。这对于在执行过程中进一步确定更具体的错误情况很有用,当您需要为错误消息添加一些额外信息时。包装器异常会处理原始错误消息的显示,以避免丢失错误的底层原因。所有数据库 API 异常都包装在下面提供的特定异常中。请仅在数据库操作中使用数据库相关的自定义异常与 try/except 语句。这对于一致处理数据库错误是必需的。

示例

try:
    statement(arg)
except sqlalchemy.exc.OperationalError as e:
    raise DBDuplicateEntry(e)

oslo_db.exception 模块

数据库相关的自定义异常。

exception oslo_db.exception.BackendNotAvailable

基础: Exception

当特定数据库后端不可用时引发的错误

在测试套件中。

exception oslo_db.exception.CantStartEngineError

基础: Exception

当 enginefacade 无法正确启动时引发的错误。

exception oslo_db.exception.ColumnError

基础: Exception

当未找到列或无效列时引发的错误。

exception oslo_db.exception.ContextNotRequestedError

Bases: AttributeError

当请求未设置的 enginefacade 属性时引发的错误。

这适用于用户定义的上下文和/或 RequestContext 对象的 sessionconnection 属性,当它们在 enginefacade 装饰器或上下文管理器范围*内*访问时,但上下文尚未请求该属性(例如,像“with enginefacade.connection.using(context)”而请求了“context.session”).

exception oslo_db.exception.DBConnectionError(inner_exception=None, cause=None)

Bases: DBError

包装的连接特定异常。

当数据库连接失败时引发。

exception oslo_db.exception.DBConsistencyError(inner_exception=None, cause=None)

Bases: DBDeadlock

数据库一致性错误。

当数据库操作由于一致性要求而失败时引发,例如当 MariaDB 检测到在 REPEATABLE-READ 隔离级别下的当前事务中,某行自上次读取以来已被更改。这是 DBDeadlock 的子类,因为它代表了可以通过重试事务来解决的同一种瞬态并发问题。

exception oslo_db.exception.DBConstraintError(table, check_name, inner_exception=None)

Bases: DBError

列错误检查约束失败。

当尝试写入不满足 CHECK 约束的值到列时引发。

参数:
  • table (str) – 检查失败的表名

  • check_name (str) – 未能满足的检查的表名

exception oslo_db.exception.DBDataError(inner_exception=None, cause=None)

Bases: DBError

由于处理数据的问题而引发的错误。

例如除零、数值超出范围、数据类型错误等

exception oslo_db.exception.DBDeadlock(inner_exception=None, cause=None)

Bases: DBError

数据库死锁错误。

当数据库操作因并发访问冲突而失败时引发,包括传统的死锁(两个或多个数据库会话持有冲突的锁)以及其他瞬态并发问题(如一致性验证失败)。这些情况通常可以通过重试事务来解决。

exception oslo_db.exception.DBDuplicateEntry(columns=None, inner_exception=None, value=None)

Bases: DBError

在唯一列中重复条目错误。

当尝试向唯一列写入与现有条目相同的条目时引发。:attr: columns 在异常实例上可用,可用于错误处理

try:
    instance_type_ref.save()
except DBDuplicateEntry as e:
    if 'colname' in e.columns:
        # Handle error.
参数:
  • columns (list) – 尝试写入重复条目的唯一列列表。

  • value – 尝试写入的值。如果我们无法为特定的数据库后端提取该值,则该值为 None。目前仅支持 MySQL 和 PostgreSQL 9.x。

exception oslo_db.exception.DBError(inner_exception=None, cause=None)

Bases: CausedByException

所有自定义数据库异常的基类。

参数:

inner_exception – 被 DBError 或其子类包装的原始异常。

exception oslo_db.exception.DBInvalidUnicodeParameter

基础: Exception

数据库 Unicode 错误。

当 unicode 参数在未指定编码指令的情况下传递给数据库时引发。

exception oslo_db.exception.DBMigrationError(inner_exception=None, cause=None)

Bases: DBError

包装的迁移特定异常。

当迁移未能成功完成时引发。

exception oslo_db.exception.DBNonExistentConstraint(table, constraint, inner_exception=None)

Bases: DBError

约束不存在。

参数:
  • table (str) – 表名

  • constraint – 约束名称

exception oslo_db.exception.DBNonExistentDatabase(database, inner_exception=None)

Bases: DBError

数据库不存在。

参数:

database (str) – 数据库名称

exception oslo_db.exception.DBNonExistentTable(table, inner_exception=None)

Bases: DBError

表不存在。

参数:

table (str) – 表名

exception oslo_db.exception.DBNotSupportedError(inner_exception=None, cause=None)

Bases: DBError

当数据库后端引发 sqla.exc.NotSupportedError 时引发

exception oslo_db.exception.DBReferenceError(table, constraint, key, key_table, inner_exception=None)

Bases: DBError

外键违反错误。

参数:
  • table (str) – 引用的表名。

  • constraint (str) – 有问题的约束名称。

  • key (str) – 损坏的引用键名。

  • key_table (str) – 包含键的表名。

exception oslo_db.exception.InvalidSortKey(key=None)

基础: Exception

用于数据库查询的排序键无效。

exception oslo_db.exception.NoEngineContextEstablished

Bases: AttributeError

当没有上下文的情况下访问 enginefacade 属性时引发的错误。

这适用于用户定义的上下文和/或 RequestContext 对象的 sessionconnection 属性,当它们在 enginefacade 装饰器或上下文管理器范围*外*访问时。

该异常是 AttributeError 的子类,因此可以保持正常的 Python 缺失属性行为,例如支持 getattr(context, 'session', None)

exception oslo_db.exception.RetryRequest(inner_exc)

基础: Exception

当 DB 操作需要重试时引发的错误。

这可能是由代码有意引发的,没有实际的 DB 错误。

oslo_db.options 模块

oslo_db.options.list_opts()

返回库中可用的 oslo.config 选项列表。

返回的列表包含库在运行时可能注册的所有 oslo.config 选项。

列表中的每个元素都是一个元组。第一个元素是将在其中注册第二个元素中列表的组的名称。组名称为 None 对应于配置文件中的 [DEFAULT] 组。

其目的是允许 Oslo 示例配置文件生成器等工具发现此库向用户公开的选项。

返回值:

一个 (group_name, opts) 元组列表

oslo_db.options.set_defaults(conf, connection=None, max_pool_size=None, max_overflow=None, pool_timeout=None)

设置配置变量的默认值。

覆盖默认选项值。

参数:
  • conf (oslo.config.cfg.ConfigOpts 实例。) – 指定用于在其设置默认选项的 Config 实例。使用实例而不是全局配置对象可以防止选项声明之间的冲突。

  • connection (str) – SQL 连接字符串。有效的 SQLite URL 形式为: * sqlite:///:memory: (或,sqlite://) * sqlite:///relative/path/to/file.db * sqlite:////absolute/path/to/file.db

  • max_pool_size (int) – 最大连接池大小。要维护的池的大小,默认为 5。这是将要持久保留在池中的最大连接数。请注意,池最初没有连接;一旦请求了此数量的连接,该数量的连接将保留。

  • max_overflow (int) – 池的最大溢出大小。当签出的连接数达到 pool_size 中设置的大小后,将返回额外的连接,直到此限制。当这些额外连接返回到池时,它们将被断开连接并丢弃。因此,池将允许的同时连接总数是 pool_size + max_overflow,池将允许的“睡眠”连接总数是 pool_size。max_overflow 可以设置为 -1 以表示没有溢出限制;对并发连接总数没有限制。默认为 10,如果参数值是 None,则使用它。

  • pool_timeout (int) – 在放弃返回连接之前等待的秒数。默认为 30,如果参数值是 None,则使用它。

默认 max_pool_size:

5

默认 max_overflow:

默认 pool_timeout:

oslo_db.warning 模块

自定义警告。

exception oslo_db.warning.NotSupportedWarning

Bases: Warning

警告已传递的参数或调用不受支持。

它继承自 Warning,以便可以将其作为独立类别进行过滤。

exception oslo_db.warning.OsloDBDeprecationWarning

Bases: DeprecationWarning

为已弃用 API 的使用而发出。

它继承自 DeprecationWarning,以便可以将其作为独立类别进行过滤。

模块内容