SqlAlchemy 2.0 中文文档(四十七)(2)https://developer.aliyun.com/article/1563046
类签名
类sqlalchemy.exc.IntegrityError
(sqlalchemy.exc.DatabaseError
)
exception sqlalchemy.exc.InterfaceError
包装了一个 DB-API InterfaceError。
类签名
类sqlalchemy.exc.InterfaceError
(sqlalchemy.exc.DBAPIError
)
exception sqlalchemy.exc.InternalError
包装了一个 DB-API InternalError。
类签名
类sqlalchemy.exc.InternalError
(sqlalchemy.exc.DatabaseError
)
exception sqlalchemy.exc.InvalidRequestError
SQLAlchemy 被要求执行一些它无法执行的操作。
此错误通常对应于运行时状态错误。
类签名
类sqlalchemy.exc.InvalidRequestError
(sqlalchemy.exc.SQLAlchemyError
)
exception sqlalchemy.exc.InvalidatePoolError
当连接池应该使所有陈旧连接无效时引发。
一个DisconnectionError
的子类,表示在连接上遇到的断开情况可能意味着整个池应该无效,因为数据库已重新启动。
此异常将以与DisconnectionError
相同的方式处理,允许在放弃之前尝试三次重新连接。
1.2 版本中的新功能。
类签名
类sqlalchemy.exc.InvalidatePoolError
(sqlalchemy.exc.DisconnectionError
)
exception sqlalchemy.exc.LegacyAPIWarning
表示处于“遗留”状态的 API,长期弃用。
类签名
类sqlalchemy.exc.LegacyAPIWarning
(sqlalchemy.exc.Base20DeprecationWarning
)
exception sqlalchemy.exc.MissingGreenlet
如果在不在 greenlet spawn 上下文中调用 async greenlet await_ 时引发的错误。
类签名
类sqlalchemy.exc.MissingGreenlet
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.MovedIn20Warning
用于指示仅移动的 API 的 RemovedIn20Warning 子类型。
类签名
class sqlalchemy.exc.MovedIn20Warning
(sqlalchemy.exc.Base20DeprecationWarning
)
exception sqlalchemy.exc.MultipleResultsFound
需要单个数据库结果,但找到多个结果。
从版本 1.4 开始更改:此异常现在是 Core 中sqlalchemy.exc
模块的一部分,已从 ORM 中移动。该符号仍然可以从sqlalchemy.orm.exc
中导入。
类签名
class sqlalchemy.exc.MultipleResultsFound
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.NoForeignKeysError
在连接期间无法找到两个可选择对象之间的外键时引发。
类签名
class sqlalchemy.exc.NoForeignKeysError
(sqlalchemy.exc.ArgumentError
)
exception sqlalchemy.exc.NoInspectionAvailable
传递给sqlalchemy.inspection.inspect()
的主题未产生检查的上下文。
类签名
class sqlalchemy.exc.NoInspectionAvailable
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.NoReferenceError
由ForeignKey
引发,表示无法解析引用。
类签名
class sqlalchemy.exc.NoReferenceError
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.NoReferencedColumnError
当所引用的Column
无法找到时,由ForeignKey
引发。
类签名
class sqlalchemy.exc.NoReferencedColumnError
(sqlalchemy.exc.NoReferenceError
)
method __init__(message: str, tname: str, cname: str)
exception sqlalchemy.exc.NoReferencedTableError
当所引用的Table
无法找到时,由ForeignKey
引发。
类签名
class sqlalchemy.exc.NoReferencedTableError
(sqlalchemy.exc.NoReferenceError
)
method __init__(message: str, tname: str)
exception sqlalchemy.exc.NoResultFound
需要数据库结果,但未找到任何结果。
从版本 1.4 开始更改:此异常现在是 Core 中sqlalchemy.exc
模块的一部分,已从 ORM 中移动。该符号仍然可以从sqlalchemy.orm.exc
中导入。
类签名
class sqlalchemy.exc.NoResultFound
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.NoSuchColumnError
请求了Row
中不存在的列。
类签名
类 sqlalchemy.exc.NoSuchColumnError
(sqlalchemy.exc.InvalidRequestError
, builtins.KeyError
)
exception sqlalchemy.exc.NoSuchModuleError
当找不到特定名称的动态加载模块(通常是数据库方言)时引发。
类签名
类 sqlalchemy.exc.NoSuchModuleError
(sqlalchemy.exc.ArgumentError
)
exception sqlalchemy.exc.NoSuchTableError
表不存在或对连接不可见。
类签名
类 sqlalchemy.exc.NoSuchTableError
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.NotSupportedError
封装了一个 DB-API NotSupportedError。
类签名
类 sqlalchemy.exc.NotSupportedError
(sqlalchemy.exc.DatabaseError
)
exception sqlalchemy.exc.ObjectNotExecutableError
当传递给 .execute()
的对象无法作为 SQL 执行时引发。
类签名
类 sqlalchemy.exc.ObjectNotExecutableError
(sqlalchemy.exc.ArgumentError
)
method __init__(target: Any)
exception sqlalchemy.exc.OperationalError
封装了一个 DB-API OperationalError。
类签名
类 sqlalchemy.exc.OperationalError
(sqlalchemy.exc.DatabaseError
)
exception sqlalchemy.exc.PendingRollbackError
事务失败,需要在继续之前回滚。
自版本 1.4 新增。
类签名
类 sqlalchemy.exc.PendingRollbackError
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.ProgrammingError
封装了一个 DB-API ProgrammingError。
类签名
类 sqlalchemy.exc.ProgrammingError
(sqlalchemy.exc.DatabaseError
)
exception sqlalchemy.exc.ResourceClosedError
从已关闭状态的连接、游标或其他对象请求了操作。
类签名
类 sqlalchemy.exc.ResourceClosedError
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.SADeprecationWarning
用于废弃的 API 的使用。
类签名
类sqlalchemy.exc.SADeprecationWarning
(sqlalchemy.exc.HasDescriptionCode
,builtins.DeprecationWarning
)
attribute deprecated_since: str | None = None
表明开始引发此弃用警告的版本
exception sqlalchemy.exc.SAPendingDeprecationWarning
与SADeprecationWarning
类似的警告,此警告在现代版本的 SQLAlchemy 中不使用。
类签名
类sqlalchemy.exc.SAPendingDeprecationWarning
(builtins.PendingDeprecationWarning
)
attribute deprecated_since: str | None = None
表明开始引发此弃用警告的版本
exception sqlalchemy.exc.SATestSuiteWarning
在测试期间检测到的非致命条件的警告
目前不在 SAWarning 之外,以便我们可以解决像 Alembic 这样的工具在警告方面做错事的问题。
类签名
类sqlalchemy.exc.SATestSuiteWarning
(builtins.Warning
)
exception sqlalchemy.exc.SAWarning
在运行时发出。
类签名
类sqlalchemy.exc.SAWarning
(sqlalchemy.exc.HasDescriptionCode
,builtins.RuntimeWarning
)
exception sqlalchemy.exc.SQLAlchemyError
通用错误类。
类签名
类sqlalchemy.exc.SQLAlchemyError
(sqlalchemy.exc.HasDescriptionCode
,builtins.Exception
)
exception sqlalchemy.exc.StatementError
在执行 SQL 语句期间发生错误。
StatementError
封装了执行过程中引发的异常,并具有statement
和params
属性,提供有关出现问题的语句的具体情况的上下文。
封装的异常对象可在orig
属性中找到。
类签名
类sqlalchemy.exc.StatementError
(sqlalchemy.exc.SQLAlchemyError
)
method __init__(message: str, statement: str | None, params: _AnyExecuteParams | None, orig: BaseException | None, hide_parameters: bool = False, code: str | None = None, ismulti: bool | None = None)
attribute ismulti: bool | None = None
传递给repr_params()
的多个参数。None
是有意义的。
attribute orig: BaseException | None = None
被抛出的原始异常。
attribute params: _AnyExecuteParams | None = None
在发生此异常时使用的参数列表。
attribute statement: str | None = None
在发生此异常时调用的字符串 SQL 语句。
exception sqlalchemy.exc.TimeoutError
在连接池在获取连接时超时时引发。
类签名
类 sqlalchemy.exc.TimeoutError
(sqlalchemy.exc.SQLAlchemyError
)
exception sqlalchemy.exc.UnboundExecutionError
尝试执行 SQL 但没有数据库连接。
类签名
类 sqlalchemy.exc.UnboundExecutionError
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.UnreflectableTableError
表存在,但由于某种原因无法反映。
自 1.2 版本新增。
类签名
类 sqlalchemy.exc.UnreflectableTableError
(sqlalchemy.exc.InvalidRequestError
)
exception sqlalchemy.exc.UnsupportedCompilationError
当操作不受给定编译器支持时引发。
另请参见
如何将 SQL 表达式渲染为字符串,可能包含内联的绑定参数?
编译器 StrSQLCompiler 无法渲染类型为 的元素
类签名
类 sqlalchemy.exc.UnsupportedCompilationError
(sqlalchemy.exc.CompileError
)
method __init__(compiler: Compiled | TypeCompiler, element_type: Type[ClauseElement], message: str | None = None)
核心内部
这里列出了一些关键的内部结构。
对象名称 | 描述 |
AdaptedConnection | 支持 DBAPI 协议的适配连接对象的接口。 |
BindTyping | 定义了在语句中传递绑定参数的不同方法以传递到数据库驱动程序。 |
Compiled | 表示编译的 SQL 或 DDL 表达式。 |
DBAPIConnection | 表示 PEP 249 数据库连接的协议。 |
DBAPICursor | 表示 PEP 249 数据库游标的协议。 |
DBAPIType | 表示 PEP 249 数据库类型的协议。 |
DDLCompiler | |
DefaultDialect | Dialect 的默认实现 |
DefaultExecutionContext | |
Dialect | 定义特定数据库和 DB-API 组合的行为。 |
ExecutionContext | 用于对应于单个执行的 Dialect 的信使对象。 |
ExpandedState | 表示在为语句生成“扩展”和“编译后”绑定参数时要使用的状态。 |
GenericTypeCompiler | |
Identified | |
IdentifierPreparer | 根据选项处理标识符的引用和大小写折叠。 |
SQLCompiler | Compiled 的默认实现。 |
StrSQLCompiler | SQLCompiler 的子类,允许将一小部分非标准 SQL 特性渲染为字符串值。 |
class sqlalchemy.engine.BindTyping
定义了在语句中传递绑定参数的不同方法以传递到数据库驱动程序。
从版本 2.0 开始。
成员
NONE, RENDER_CASTS, SETINPUTSIZES
类签名
类sqlalchemy.engine.BindTyping
(enum.Enum
)
attribute NONE = 1
没有采取任何步骤将类型信息传递给数据库驱动程序。
这是 SQLite、MySQL/MariaDB、SQL Server 等数据库的默认行为。
attribute RENDER_CASTS = 3
在 SQL 字符串中渲染转换或其他指令。
此方法适用于所有 PostgreSQL 方言,包括 asyncpg、pg8000、psycopg、psycopg2。实现此方法的方言可以选择在 SQL 语句中明确转换哪些类型的数据类型,哪些不转换。
使用 RENDER_CASTS 时,编译器将为渲染的字符串表示形式中的每个 BindParameter
对象调用 SQLCompiler.render_bind_cast()
方法,该对象的方言级类型设置了 TypeEngine.render_bind_cast
属性。
SQLCompiler.render_bind_cast()
也用于渲染一种形式的 “insertmanyvalues” 查询的转换,当同时设置了 InsertmanyvaluesSentinelOpts.USE_INSERT_FROM_SELECT
和 InsertmanyvaluesSentinelOpts.RENDER_SELECT_COL_CASTS
时,转换应用于中间列,例如 “INSERT INTO t (a, b, c) SELECT p0::TYP, p1::TYP, p2::TYP ” “FROM (VALUES (?, ?), (?, ?), …)”。
2.0.10 版本中的新内容:- 现在在 “insertmanyvalues” 实现的某些部分中使用了 SQLCompiler.render_bind_cast()
。
attribute SETINPUTSIZES = 2
使用 pep-249 的 setinputsizes 方法。
仅对支持此方法的 DBAPIs 实现了此功能,并且对于 SQLAlchemy 方言已经设置了适当的基础架构的情况下才实现了。当前的方言包括 cx_Oracle,以及对使用 pyodbc 的 SQL Server 的可选支持。
使用 setinputsizes 时,方言还可以通过包含/排除列表的方式只对某些数据类型使用该方法。
使用 SETINPUTSIZES 时,对于每个执行的语句,具有绑定参数的语句都会调用 Dialect.do_set_input_sizes()
方法。
class sqlalchemy.engine.Compiled
表示已编译的 SQL 或 DDL 表达式。
SqlAlchemy 2.0 中文文档(四十七)(4)https://developer.aliyun.com/article/1563049