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