核心内部结构

这里列出了一些关键的内部结构。

对象名称 描述

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 中新增。

类签名

class sqlalchemy.engine.BindTyping (enum.Enum)

attribute sqlalchemy.engine.BindTyping.NONE = 1

不采取任何步骤将类型信息传递给数据库驱动程序。

这是 SQLite、MySQL / MariaDB、SQL Server 等数据库的默认行为。

attribute sqlalchemy.engine.BindTyping.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_SELECTInsertmanyvaluesSentinelOpts.RENDER_SELECT_COL_CASTS 都设置时,强制转换将应用于中间列,例如“INSERT INTO t (a, b, c) SELECT p0::TYP, p1::TYP, p2::TYP ” “FROM (VALUES (?, ?), (?, ?), …)”。

版本 2.0.10 中新增: - SQLCompiler.render_bind_cast() 现在在“insertmanyvalues”实现的某些元素中使用。

attribute sqlalchemy.engine.BindTyping.SETINPUTSIZES = 2

使用 pep-249 setinputsizes 方法。

这仅针对支持此方法的 DBAPI 以及 SQLAlchemy 方言为此方言设置了适当的基础结构的 DBAPI 实现。当前方言包括 cx_Oracle 以及使用 pyodbc 对 SQL Server 的可选支持。

使用 setinputsizes 时,方言还有一种方法,可以只对某些数据类型使用该方法,使用 include/exclude 列表。

使用 SETINPUTSIZES 时,将为每个执行的语句调用 Dialect.do_set_input_sizes() 方法,该语句具有绑定参数。

class sqlalchemy.engine.Compiled

表示已编译的 SQL 或 DDL 表达式。

Compiled 对象的 __str__ 方法应该生成语句的实际文本。 Compiled 对象特定于其底层数据库方言,并且可能也可能不特定于特定绑定参数集中引用的列。在任何情况下,Compiled 对象都不应该依赖于这些绑定参数的实际值,即使它可能将这些值作为默认值引用。

method sqlalchemy.engine.Compiled.__init__(dialect: Dialect, statement: ClauseElement | None, schema_translate_map: SchemaTranslateMapType | None = None, render_schema_translate: bool = False, compile_kwargs: Mapping[str, Any] = {})

构造一个新的 Compiled 对象。

参数:
  • dialect – 用于编译的 Dialect

  • statement – 要编译的 ClauseElement

  • schema_translate_map

    在形成最终 SQL 时要转换的模式名称字典。

    另请参见

    模式名称的转换

  • compile_kwargs – 将传递给 Compiled.process() 的初始调用的其他 kwargs。

attribute sqlalchemy.engine.Compiled.cache_key: CacheKey | None = None

创建此 Compiled 对象之前生成的 CacheKey

这用于需要访问在最初缓存 Compiled 实例时生成的原始 CacheKey 实例的例程,通常是为了将原始的 BindParameter 对象列表与每次调用时生成的每个语句列表进行协调。

attribute sqlalchemy.engine.Compiled.compile_state: CompileState | None = None

可选的 CompileState 对象,它维护编译器使用的额外状态。

主要的执行对象,如 InsertUpdateDeleteSelect 将在编译时生成此状态,以便计算有关对象的其他信息。对于要执行的顶级对象,状态可以存储在此处,它也可以对结果集处理具有适用性。

版本 1.4 中的新功能。

method sqlalchemy.engine.Compiled.construct_params(params: _CoreSingleExecuteParams | None = None, extracted_parameters: Sequence[BindParameter[Any]] | None = None, escape_names: bool = True) _MutableCoreSingleExecuteParams | None

返回此已编译对象的绑定参数。

参数:

params – 字符串/对象对的字典,其值将覆盖编译到语句中的绑定值。

attribute sqlalchemy.engine.Compiled.dml_compile_state: CompileState | None = None

在分配 .isinsert、.isupdate 或 .isdelete 的同时分配的可选 CompileState

这通常与 .compile_state 相同,除了像 ORMFromStatementCompileState 对象这样的情况。

版本 1.4.40 中的新功能。

attribute sqlalchemy.engine.Compiled.execution_options: _ExecuteOptions = {}

从语句中传播的执行选项。在某些情况下,语句的子元素可以修改这些选项。

attribute sqlalchemy.engine.Compiled.params

返回此已编译对象的绑定参数。

属性 sqlalchemy.engine.Compiled.sql_compiler

返回一个能够处理 SQL 表达式的 Compiled 对象。

如果此编译器本身就是一个,它很可能只是返回“self”。

属性 sqlalchemy.engine.Compiled.state: CompilerState

编译器状态的描述。

属性 sqlalchemy.engine.Compiled.statement: ClauseElement | None = None

要编译的语句。

属性 sqlalchemy.engine.Compiled.string: str = ''

statement 的字符串表示形式。

sqlalchemy.engine.interfaces.DBAPIConnection

表示 PEP 249 数据库连接的协议。

版本 2.0 中新增。

另请参见

连接对象 - 在 PEP 249 中。

类签名

class sqlalchemy.engine.interfaces.DBAPIConnection (typing_extensions.Protocol)

属性 sqlalchemy.engine.interfaces.DBAPIConnection.autocommit: bool
方法 sqlalchemy.engine.interfaces.DBAPIConnection.close() None
方法 sqlalchemy.engine.interfaces.DBAPIConnection.commit() None
方法 sqlalchemy.engine.interfaces.DBAPIConnection.cursor() DBAPICursor
方法 sqlalchemy.engine.interfaces.DBAPIConnection.rollback() None
sqlalchemy.engine.interfaces.DBAPICursor

表示 PEP 249 数据库游标的协议。

版本 2.0 中新增。

另请参见

游标对象 - 在 PEP 249 中。

类签名

class sqlalchemy.engine.interfaces.DBAPICursor (typing_extensions.Protocol)

属性 sqlalchemy.engine.interfaces.DBAPICursor.arraysize: int
方法 sqlalchemy.engine.interfaces.DBAPICursor.callproc(procname: str, parameters: Sequence[Any] = Ellipsis) Any
方法 sqlalchemy.engine.interfaces.DBAPICursor.close() None
属性 sqlalchemy.engine.interfaces.DBAPICursor.description

游标的 description 属性。

另请参见

cursor.description - 在 PEP 249 中。

方法 sqlalchemy.engine.interfaces.DBAPICursor.execute(operation: Any, parameters: Sequence[Any] | Mapping[str, Any] | None = None) Any
方法 sqlalchemy.engine.interfaces.DBAPICursor.executemany(operation: Any, parameters: Sequence[Sequence[Any]] | Sequence[Mapping[str, Any]]) Any
方法 sqlalchemy.engine.interfaces.DBAPICursor.fetchall() Sequence[Any]
方法 sqlalchemy.engine.interfaces.DBAPICursor.fetchmany(size: int = Ellipsis) Sequence[Any]
方法 sqlalchemy.engine.interfaces.DBAPICursor.fetchone() Any | None
属性 sqlalchemy.engine.interfaces.DBAPICursor.lastrowid: int
方法 sqlalchemy.engine.interfaces.DBAPICursor.nextset() bool | None
属性 sqlalchemy.engine.interfaces.DBAPICursor.rowcount
方法 sqlalchemy.engine.interfaces.DBAPICursor.setinputsizes(sizes: Sequence[Any]) None
方法 sqlalchemy.engine.interfaces.DBAPICursor.setoutputsize(size: Any, column: Any) None
sqlalchemy.engine.interfaces.DBAPIType

表示 PEP 249 数据库类型的协议。

版本 2.0 中新增。

另请参见

类型对象 - 在 PEP 249

类签名

sqlalchemy.engine.interfaces.DBAPIType (typing_extensions.Protocol)

sqlalchemy.sql.compiler.DDLCompiler
方法 sqlalchemy.sql.compiler.DDLCompiler.__init__(dialect: Dialect, statement: ClauseElement | None, schema_translate_map: SchemaTranslateMapType | None = None, render_schema_translate: bool = False, compile_kwargs: Mapping[str, Any] = {})

继承自 sqlalchemy.sql.compiler.Compiled.__init__ 方法 Compiled

构造一个新的 Compiled 对象。

参数:
  • dialectDialect 用于编译。

  • statementClauseElement 将被编译。

  • schema_translate_map

    在形成最终 SQL 时要转换的模式名称字典。

    另请参见

    模式名称的转换

  • compile_kwargs – 将传递给 Compiled.process() 的初始调用的额外关键字参数。

属性 sqlalchemy.sql.compiler.DDLCompiler.cache_key: CacheKey | None = None

继承自 Compiled.cache_key 属性的 Compiled

在创建此 Compiled 对象之前生成的 CacheKey

这用于需要访问原始 CacheKey 实例的例程,该实例是在 Compiled 实例首次缓存时生成的,通常是为了协调原始的 BindParameter 对象列表与每次调用时生成的每个语句列表。

attribute sqlalchemy.sql.compiler.DDLCompiler.compile_state: CompileState | None = None

继承自 Compiled.compile_state 属性的 Compiled

可选的 CompileState 对象,它维护编译器使用的额外状态。

主要的执行对象,如 InsertUpdateDeleteSelect 将在编译时生成此状态,以便计算有关对象的其他信息。对于要执行的顶级对象,状态可以存储在此处,它也可以对结果集处理具有适用性。

版本 1.4 中的新功能。

method sqlalchemy.sql.compiler.DDLCompiler.construct_params(params: _CoreSingleExecuteParams | None = None, extracted_parameters: Sequence[BindParameter[Any]] | None = None, escape_names: bool = True) _MutableCoreSingleExecuteParams | None

返回此已编译对象的绑定参数。

参数:

params – 一个字符串/对象对的字典,其值将覆盖编译到语句中的绑定值。

method sqlalchemy.sql.compiler.DDLCompiler.define_constraint_remote_table(constraint, table, preparer)

格式化 CREATE CONSTRAINT 子句的远程表子句。

attribute sqlalchemy.sql.compiler.DDLCompiler.dml_compile_state: CompileState | None = None

继承自 Compiled.dml_compile_state 属性的 Compiled

在分配 .isinsert、.isupdate 或 .isdelete 的同时分配的可选 CompileState

这通常与 .compile_state 相同,除了像 ORMFromStatementCompileState 对象这样的情况。

版本 1.4.40 中的新功能。

attribute sqlalchemy.sql.compiler.DDLCompiler.execution_options: _ExecuteOptions = {}

继承自 Compiled.execution_options 属性的 Compiled

从语句中传播的执行选项。在某些情况下,语句的子元素可以修改这些选项。

attribute sqlalchemy.sql.compiler.DDLCompiler.params

继承自 Compiled.params 属性的 Compiled

返回此已编译对象的绑定参数。

attribute sqlalchemy.sql.compiler.DDLCompiler.sql_compiler
attribute sqlalchemy.sql.compiler.DDLCompiler.state: CompilerState

编译器状态的描述。

attribute sqlalchemy.sql.compiler.DDLCompiler.statement: ClauseElement | None = None

继承自 Compiled.statement 属性的 Compiled

要编译的语句。

attribute sqlalchemy.sql.compiler.DDLCompiler.string: str = ''

继承自 Compiled.string 属性的 Compiled

statement 的字符串表示形式。

class sqlalchemy.engine.default.DefaultDialect

Dialect 的默认实现。

成员

bind_typing, colspecs, connect(), construct_arguments, create_connect_args(), create_xid(), cte_follows_insert, dbapi, dbapi_exception_translation_map, ddl_compiler, default_isolation_level, default_metavalue_token, default_schema_name, default_sequence_base, delete_executemany_returning, delete_returning, delete_returning_multifrom, denormalize_name(), div_is_floordiv, do_begin(), do_begin_twophase(), do_close(), do_commit(), do_commit_twophase(), do_execute(), do_execute_no_params(), do_executemany(), do_ping(), do_prepare_twophase(), do_recover_twophase(), do_release_savepoint(), do_rollback(), do_rollback_to_savepoint(), do_rollback_twophase(), do_savepoint(), do_set_input_sizes(), do_terminate(), driver, engine_config_types, engine_created(), exclude_set_input_sizes, execute_sequence_format, execution_ctx_cls, favor_returning_over_lastrowid, full_returning, get_async_dialect_cls(), get_check_constraints(), get_columns(), get_default_isolation_level(), get_dialect_cls(), get_dialect_pool_class(), get_driver_connection(), get_foreign_keys(), get_indexes(), get_isolation_level(), get_isolation_level_values(), get_materialized_view_names(), get_multi_check_constraints(), get_multi_columns(), get_multi_foreign_keys(), get_multi_indexes(), get_multi_pk_constraint(), get_multi_table_comment(), get_multi_table_options(), get_multi_unique_constraints(), get_pk_constraint(), get_schema_names(), get_sequence_names(), get_table_comment(), get_table_names(), get_table_options(), get_temp_table_names(), get_temp_view_names(), get_unique_constraints(), get_view_definition(), get_view_names(), has_index(), has_schema(), has_sequence(), has_table(), has_terminate, identifier_preparer, import_dbapi(), include_set_input_sizes, initialize(), inline_comments, insert_executemany_returning, insert_executemany_returning_sort_by_parameter_order, insert_returning, insertmanyvalues_implicit_sentinel, insertmanyvalues_max_parameters, insertmanyvalues_page_size, is_async, is_disconnect(), label_length, load_provisioning(), loaded_dbapi, max_identifier_length, name, normalize_name(), on_connect(), on_connect_url(), paramstyle, positional, preexecute_autoincrement_sequences, preparer, reflection_options, reset_isolation_level(), returns_native_bytes, sequences_optional, server_side_cursors, server_version_info, set_connection_execution_options(), set_engine_execution_options(), set_isolation_level(), statement_compiler, supports_alter, supports_comments, supports_constraint_comments, supports_default_metavalue, supports_default_values, supports_empty_insert, supports_identity_columns, supports_multivalues_insert, supports_native_boolean, supports_native_decimal, supports_native_enum, supports_native_uuid, supports_sane_multi_rowcount, supports_sane_rowcount, supports_sane_rowcount_returning, supports_sequences, supports_server_side_cursors, supports_simple_order_by_label, supports_statement_cache, tuple_in_values, type_compiler, type_compiler_cls, type_compiler_instance, type_descriptor(), update_executemany_returning, update_returning, update_returning_multifrom, use_insertmanyvalues, use_insertmanyvalues_wo_returning

attribute sqlalchemy.engine.default.DefaultDialect.bind_typing = 1

定义将类型信息传递给数据库和/或驱动程序以进行绑定参数的方法。

请参阅 BindTyping 以了解值。

版本 2.0 中新增。

attribute sqlalchemy.engine.default.DefaultDialect.colspecs: MutableMapping[Type[TypeEngine[Any]], Type[TypeEngine[Any]]] = {}

来自 sqlalchemy.types 的 TypeEngine 类映射到特定于方言类的子类的字典。此字典仅在类级别,不会从方言实例本身访问。

method sqlalchemy.engine.default.DefaultDialect.connect(*cargs, **cparams)

使用此方言的 DBAPI 建立连接。

此方法的默认实现是

def connect(self, *cargs, **cparams):
    return self.dbapi.connect(*cargs, **cparams)

参数 *cargs, **cparams 直接从该方言的 Dialect.create_connect_args() 方法生成。

该方法可用于当从 DBAPI 获取新连接时需要执行按连接编程步骤的方言。

参数:
返回值:

DBAPI 连接,通常来自 PEP 249 模块级 .connect() 函数。

attribute sqlalchemy.engine.default.DefaultDialect.construct_arguments: List[Tuple[Type[SchemaItem | ClauseElement], Mapping[str, Any]]] | None = None

Dialect.construct_arguments 属性继承 Dialect

各种 SQLAlchemy 结构(通常是模式项)的可选参数规范集。

要实现,请建立一系列元组,如下所示

construct_arguments = [
    (schema.Index, {
        "using": False,
        "where": None,
        "ops": None
    })
]

如果上述结构在 PostgreSQL 方言上建立,则 Index 结构现在将接受关键字参数 postgresql_usingpostgresql_wherepostgresql_ops。任何其他指定给 Index 构造函数的参数,如果以 postgresql_ 为前缀,则会引发 ArgumentError

没有包含 construct_arguments 成员的方言将不会参与参数验证系统。对于这样的方言,所有参与的结构都接受任何参数名称,在以该方言名称为前缀的参数命名空间内。这里的理由是,尚未实现此功能的第三方方言继续以旧的方式运行。

另请参见

DialectKWArgs - 实现消耗 DefaultDialect.construct_arguments 的基类

method sqlalchemy.engine.default.DefaultDialect.create_connect_args(url)

构建与 DBAPI 兼容的连接参数。

给定一个 URL 对象,返回一个包含 (*args, **kwargs) 的元组,适合直接发送到 dbapi 的 connect 函数。这些参数被发送到 Dialect.connect() 方法,该方法然后运行 DBAPI 级别的 connect() 函数。

该方法通常利用 URL.translate_connect_args() 方法来生成选项字典。

默认实现为

def create_connect_args(self, url):
    opts = url.translate_connect_args()
    opts.update(url.query)
    return ([], opts)
参数:

urlURL 对象

返回值:

将传递给 Dialect.connect() 方法的 (*args, **kwargs) 元组。

method sqlalchemy.engine.default.DefaultDialect.create_xid()

创建随机的两阶段事务 ID。

此 ID 将传递给 do_begin_twophase()、do_rollback_twophase()、do_commit_twophase()。它的格式未指定。

attribute sqlalchemy.engine.default.DefaultDialect.cte_follows_insert: bool = False

目标数据库,当给定一个带有 INSERT 语句的 CTE 时,需要将 CTE 放在 INSERT 之后

attribute sqlalchemy.engine.default.DefaultDialect.dbapi: ModuleType | None

对 DBAPI 模块对象本身的引用。

SQLAlchemy 方言使用类方法 Dialect.import_dbapi() 导入 DBAPI 模块。这样做的理由是,任何方言模块都可以导入并用于生成 SQL 语句,而无需实际安装 DBAPI 驱动程序。只有当使用 Engine 构造 create_engine() 时,才会导入 DBAPI;此时,创建过程将 DBAPI 模块分配给此属性。

因此,方言应该实现 Dialect.import_dbapi(),它将导入必要的模块并返回它,然后在方言代码中引用 self.dbapi 来引用 DBAPI 模块的内容。

在版本 The 中更改: Dialect.dbapi 属性专门用作对 DBAPI 模块的每个 Dialect 实例的引用。以前未完全记录的 .Dialect.dbapi() 类方法已弃用,并由 Dialect.import_dbapi() 替换。

attribute sqlalchemy.engine.default.DefaultDialect.dbapi_exception_translation_map: Mapping[str, str] = {}

Dialect.dbapi_exception_translation_map 属性继承 Dialect

一个名称字典,该字典将包含 pep-249 异常(“IntegrityError”、“OperationalError”等)的名称作为值,并以备用类名作为键,以支持 DBAPI 具有未按引用方式命名的异常类的情况(例如 IntegrityError = MyException)。在绝大多数情况下,此字典为空。

attribute sqlalchemy.engine.default.DefaultDialect.ddl_compiler

的别名 DDLCompiler

attribute sqlalchemy.engine.default.DefaultDialect.default_isolation_level: IsolationLevel | None

新连接隐式存在的隔离级别。

attribute sqlalchemy.engine.default.DefaultDialect.default_metavalue_token: str = 'DEFAULT'

对于 INSERT… VALUES (DEFAULT) 语法,括号中要放置的标记。

attribute sqlalchemy.engine.default.DefaultDialect.default_schema_name: str | None = None

默认模式的名称。此值仅适用于支持的方言,通常在首次连接到数据库时填充。

attribute sqlalchemy.engine.default.DefaultDialect.default_sequence_base: int = 1

将作为 CREATE SEQUENCE DDL 语句的“START WITH”部分呈现的默认值。

attribute sqlalchemy.engine.default.DefaultDialect.delete_executemany_returning: bool = False

方言支持使用 executemany 的 DELETE..RETURNING。

attribute sqlalchemy.engine.default.DefaultDialect.delete_returning: bool = False

如果方言支持使用 DELETE 的 RETURNING。

版本 2.0 中新增。

attribute sqlalchemy.engine.default.DefaultDialect.delete_returning_multifrom: bool = False

如果方言支持使用 DELETE..FROM 的 RETURNING。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.denormalize_name(name)

如果给定的名称是全小写,则将其转换为后端的区分大小写标识符。

此方法仅在方言定义 requires_name_normalize=True 时使用。

attribute sqlalchemy.engine.default.DefaultDialect.div_is_floordiv: bool = True

目标数据库将 / 除法运算符视为“向下取整除法”。

method sqlalchemy.engine.default.DefaultDialect.do_begin(dbapi_connection)

提供 connection.begin() 的实现,给定一个 DB-API 连接。

DBAPI 没有专门的“begin”方法,并且预计事务是隐式的。此钩子提供给那些可能需要这方面额外帮助的 DBAPI。

参数:

dbapi_connection – 一个 DBAPI 连接,通常在 ConnectionFairy 中代理。

method sqlalchemy.engine.default.DefaultDialect.do_begin_twophase(connection: Connection, xid: Any) None

继承自 Dialect Dialect.do_begin_twophase() 方法

在给定的连接上开始两阶段事务。

参数:
method sqlalchemy.engine.default.DefaultDialect.do_close(dbapi_connection)

提供 connection.close() 的实现,给定一个 DB-API 连接。

此钩子由 Pool 在连接从池中分离或被返回到超出池正常容量时调用。

method sqlalchemy.engine.default.DefaultDialect.do_commit(dbapi_connection)

提供 connection.commit() 的实现,给定一个 DB-API 连接。

参数:

dbapi_connection – 一个 DBAPI 连接,通常在 ConnectionFairy 中代理。

method sqlalchemy.engine.default.DefaultDialect.do_commit_twophase(connection: Connection, xid: Any, is_prepared: bool = True, recover: bool = False) None

继承自 Dialect Dialect.do_commit_twophase() 方法

在给定的连接上提交两阶段事务。

参数:
method sqlalchemy.engine.default.DefaultDialect.do_execute(cursor, statement, parameters, context=None)

提供 cursor.execute(statement, parameters) 的实现。

method sqlalchemy.engine.default.DefaultDialect.do_execute_no_params(cursor, statement, context=None)

提供 cursor.execute(statement) 的实现。

参数集合不应发送。

method sqlalchemy.engine.default.DefaultDialect.do_executemany(cursor, statement, parameters, context=None)

提供 cursor.executemany(statement, parameters) 的实现。

method sqlalchemy.engine.default.DefaultDialect.do_ping(dbapi_connection: DBAPIConnection) bool

ping DBAPI 连接,如果连接可用则返回 True。

method sqlalchemy.engine.default.DefaultDialect.do_prepare_twophase(connection: Connection, xid: Any) None

继承自 Dialect Dialect.do_prepare_twophase() 方法

在给定连接上准备一个两阶段事务。

参数:
method sqlalchemy.engine.default.DefaultDialect.do_recover_twophase(connection: Connection) List[Any]

继承自 Dialect Dialect.do_recover_twophase() 方法

恢复给定连接上未提交的已准备好的两阶段事务标识符列表。

参数:

connection – 一个 Connection

method sqlalchemy.engine.default.DefaultDialect.do_release_savepoint(connection, name)

在连接上释放命名保存点。

参数:
method sqlalchemy.engine.default.DefaultDialect.do_rollback(dbapi_connection)

提供 connection.rollback() 的实现,给定一个 DB-API 连接。

参数:

dbapi_connection – 一个 DBAPI 连接,通常代理在 ConnectionFairy 中。

method sqlalchemy.engine.default.DefaultDialect.do_rollback_to_savepoint(connection, name)

将连接回滚到命名的保存点。

参数:
method sqlalchemy.engine.default.DefaultDialect.do_rollback_twophase(connection: Connection, xid: Any, is_prepared: bool = True, recover: bool = False) None

继承自 Dialect.do_rollback_twophase() 方法 Dialect

回滚给定连接上的两阶段事务。

参数:
方法 sqlalchemy.engine.default.DefaultDialect.do_savepoint(connection, name)

创建具有给定名称的保存点。

参数:
方法 sqlalchemy.engine.default.DefaultDialect.do_set_input_sizes(cursor: DBAPICursor, list_of_tuples: _GenericSetInputSizesType, context: ExecutionContext) Any

继承自 Dialect.do_set_input_sizes() 方法 Dialect

使用适当的参数调用 cursor.setinputsizes() 方法

如果 Dialect.bind_typing 属性设置为 BindTyping.SETINPUTSIZES 值,则会调用此钩子。参数数据以元组列表传递(paramname,dbtype,sqltype),其中 paramname 是语句中参数的键,dbtype 是 DBAPI 数据类型,sqltype 是 SQLAlchemy 类型。元组的顺序是正确的参数顺序。

版本 1.4 中的新功能。

在版本 2.0 中更改: - 通过将 Dialect.bind_typing 设置为 BindTyping.SETINPUTSIZES 来启用 setinputsizes 模式。接受 use_setinputsizes 参数的方言应该相应地设置此值。

方法 sqlalchemy.engine.default.DefaultDialect.do_terminate(dbapi_connection)

提供 connection.close() 的实现,该实现尽可能地尝试不阻塞,给定 DBAPI 连接。

在绝大多数情况下,这只是调用 .close(),但是对于某些 asyncio 方言来说,可能会调用不同的 API 特性。

此钩子由 Pool 在回收连接或连接已失效时调用。

在版本 1.4.41 中新添加。

属性 sqlalchemy.engine.default.DefaultDialect.driver: str

方言的 DBAPI 的标识名称

属性 sqlalchemy.engine.default.DefaultDialect.engine_config_types: Mapping[str, Any] = {'echo': <function bool_or_str.<locals>.bool_or_value>, 'echo_pool': <function bool_or_str.<locals>.bool_or_value>, 'future': <function asbool>, 'max_overflow': <function asint>, 'pool_recycle': <function asint>, 'pool_size': <function asint>, 'pool_timeout': <function asint>}

字符串键的映射,这些键可以链接到类型转换函数的引擎配置中。

类方法 sqlalchemy.engine.default.DefaultDialect.engine_created(engine: Engine) None

继承自 Dialect.engine_created() 方法 Dialect

在返回最终 Engine 之前调用的一个便利钩子。

如果方言从 get_dialect_cls() 方法返回了不同的类,则钩子将在这两个类上调用,首先在 get_dialect_cls() 方法返回的方言类上调用,然后在调用该方法的类上调用。

钩子应该由方言和/或包装器用来对引擎或其组件应用特殊事件。特别是,它允许方言包装类应用方言级别的事件。

属性 sqlalchemy.engine.default.DefaultDialect.exclude_set_input_sizes: Set[Any] | None = None

DBAPI 类型对象的集合,这些对象应该在自动 cursor.setinputsizes() 调用中排除。

这仅在 bind_typing 为 BindTyping.SET_INPUT_SIZES 时使用

属性 sqlalchemy.engine.default.DefaultDialect.execute_sequence_format

tuple 的别名

属性 sqlalchemy.engine.default.DefaultDialect.execution_ctx_cls

DefaultExecutionContext 的别名

属性 sqlalchemy.engine.default.DefaultDialect.favor_returning_over_lastrowid: bool = False

对于支持 lastrowid 和 RETURNING 插入策略的后端,对于简单的单整型主键插入,优先使用 RETURNING。

在大多数后端上,cursor.lastrowid 的性能往往更高。

属性 sqlalchemy.engine.default.DefaultDialect.full_returning

从版本 2.0 开始弃用: full_returning 已弃用,请使用 insert_returning、update_returning、delete_returning

类方法 sqlalchemy.engine.default.DefaultDialect.get_async_dialect_cls(url: URL) Type[Dialect]

继承自 Dialect.get_async_dialect_cls() 方法 Dialect

给定一个 URL,返回异步引擎将使用的 Dialect

默认情况下,它是 Dialect.get_dialect_cls() 的别名,只返回 cls。如果方言在相同名称下提供同步和异步版本,例如 psycopg 驱动程序,则可以使用它。

版本 2 中的新功能。

方法 sqlalchemy.engine.default.DefaultDialect.get_check_constraints(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedCheckConstraint]

继承自 Dialect.get_check_constraints() 方法 Dialect

返回关于 table_name 中检查约束的信息。

给定一个字符串 table_name 和一个可选的字符串 schema,以与 ReflectedCheckConstraint 字典相对应的字典列表形式返回检查约束信息。

这是一个内部方言方法。应用程序应使用 Inspector.get_check_constraints()

方法 sqlalchemy.engine.default.DefaultDialect.get_columns(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedColumn]

继承自 Dialect.get_columns() 方法 Dialect

返回关于 table_name 中列的信息。

给定一个 Connection、一个字符串 table_name 和一个可选的字符串 schema,以与 ReflectedColumn 字典相对应的字典列表形式返回列信息。

这是一个内部方言方法。应用程序应使用 Inspector.get_columns()

方法 sqlalchemy.engine.default.DefaultDialect.get_default_isolation_level(dbapi_conn)

给定一个 DBAPI 连接,返回其隔离级别,或者如果无法检索,则返回默认隔离级别。

可以通过子类覆盖,以便为无法可靠地检索实际隔离级别的数据库提供“回退”隔离级别。

默认情况下,调用 Interfaces.get_isolation_level() 方法,传播任何引发的异常。

版本 1.3.22 中的新功能。

类方法 sqlalchemy.engine.default.DefaultDialect.get_dialect_cls(url: URL) Type[Dialect]

继承自 Dialect.get_dialect_cls() 方法 Dialect

给定一个 URL,返回将使用的 Dialect

这是一个钩子,允许外部插件通过允许从 URL 中加载插件(基于入口点)并返回要使用的实际方言来提供现有方言周围的功能。

默认情况下,它只返回 cls。

method sqlalchemy.engine.default.DefaultDialect.get_dialect_pool_class(url: URL) Type[Pool]

返回给定 URL 要使用的 Pool 类。

method sqlalchemy.engine.default.DefaultDialect.get_driver_connection(connection)

返回由外部驱动程序包返回的连接对象。

对于使用符合 DBAPI 的驱动程序的普通方言,此调用将只返回作为参数传递的 connection。对于改为调整非 DBAPI 兼容驱动程序的方言,例如在调整 asyncio 驱动程序时,此调用将返回驱动程序返回的连接类对象。

新版 1.4.24 中的新增功能。

method sqlalchemy.engine.default.DefaultDialect.get_foreign_keys(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedForeignKeyConstraint]

继承自 Dialect.get_foreign_keys() 方法 of Dialect

返回有关 table_name 中外键的信息。

给定一个 Connection、字符串 table_name 以及可选的字符串 schema,返回外键信息,以与 ReflectedForeignKeyConstraint 字典对应的字典列表形式。

这是一个内部方言方法。应用程序应使用 Inspector.get_foreign_keys()

method sqlalchemy.engine.default.DefaultDialect.get_indexes(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedIndex]

继承自 Dialect.get_indexes() 方法 of Dialect

返回有关 table_name 中索引的信息。

给定一个 Connection、字符串 table_name 以及可选的字符串 schema,返回索引信息,以与 ReflectedIndex 字典对应的字典列表形式。

这是一个内部方言方法。应用程序应使用 Inspector.get_indexes().

method sqlalchemy.engine.default.DefaultDialect.get_isolation_level(dbapi_connection: DBAPIConnection) Literal['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED', 'READ UNCOMMITTED', 'AUTOCOMMIT']

继承自 Dialect.get_isolation_level() 方法 of Dialect

给定一个 DBAPI 连接,返回其隔离级别。

在使用 Connection 对象时,可以使用 Connection.connection 访问器获取相应的 DBAPI 连接。

请注意,这是一个方言级别的方法,用作 ConnectionEngine 隔离级别功能实现的一部分;对于大多数典型用例,应优先使用这些 API。

另请参见

Connection.get_isolation_level() - 查看当前级别

Connection.default_isolation_level - 查看默认级别

Connection.execution_options.isolation_level - 设置每个 Connection 隔离级别

create_engine.isolation_level - 设置每个 Engine 隔离级别

method sqlalchemy.engine.default.DefaultDialect.get_isolation_level_values(dbapi_conn: DBAPIConnection) List[Literal['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED', 'READ UNCOMMITTED', 'AUTOCOMMIT']]

继承自 Dialect.get_isolation_level_values() 方法 of Dialect

返回此方言接受的字符串隔离级别名称序列。

可用名称应使用以下约定

  • 使用大写名称。隔离级别方法将接受小写名称,但这些名称将在传递给方言之前被规范化为大写。

  • 单独的词语应该用空格隔开,而不是下划线,例如 REPEATABLE READ。隔离级别名称将在传递给方言之前将下划线转换为空格。

  • 如果后端支持四个标准隔离级别的名称,则这些名称应为 READ UNCOMMITTED READ COMMITTED, REPEATABLE READ, SERIALIZABLE

  • 如果方言支持自动提交选项,则应使用隔离级别名称 AUTOCOMMIT 提供。

  • 其他隔离模式也可能存在,前提是它们以大写字母命名并使用空格而不是下划线。

此函数用于使默认方言可以检查给定的隔离级别参数是否有效,否则会引发 ArgumentError

一个 DBAPI 连接被传递给该方法,在方言需要查询连接本身以确定此列表的极不可能的情况下,但预计大多数后端将返回一个硬编码的值列表。如果方言支持“AUTOCOMMIT”,则该值也应存在于返回的序列中。

默认情况下,该方法会引发 NotImplementedError。如果方言没有实现此方法,则默认方言不会在将给定的隔离级别值传递给 Dialect.set_isolation_level() 方法之前对其进行任何检查。这是为了允许与可能尚未实现此方法的第三方方言向后兼容。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_materialized_view_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

继承自 Dialect.get_materialized_view_names() 方法 Dialect

返回数据库中所有可用的物化视图名称列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_materialized_view_names()

参数:

schema

要查询的模式名称,如果它不是默认模式。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_check_constraints(connection, **kw)

返回给定 schema 中所有表中的检查约束的信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_check_constraints().

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_columns(connection, **kw)

返回给定 schema 中所有表中的列信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_columns().

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_foreign_keys(connection, **kw)

返回给定 schema 中所有表中的外键信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_foreign_keys()

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_indexes(connection, **kw)

返回给定 schema 中所有表中的索引信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_indexes().

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_pk_constraint(connection, **kw)

返回给定 schema 中所有表中的主键约束信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_pk_constraint().

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_table_comment(connection, **kw)

返回给定 schema 中所有表中的表注释信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_table_comment()

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_table_options(connection, **kw)

返回在创建给定模式中的表时指定的选项字典。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_table_options()

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.get_multi_unique_constraints(connection, **kw)

返回给定 schema 中所有表中的唯一约束信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_unique_constraints().

注意

The DefaultDialect 提供了一个默认实现,它将为 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象调用单个表方法,具体取决于提供的 kind。想要支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

方法 sqlalchemy.engine.default.DefaultDialect.get_pk_constraint(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) ReflectedPrimaryKeyConstraint

继承自 Dialect.get_pk_constraint() 方法 Dialect

返回关于 table_name 的主键约束信息。

给定一个 Connection,一个字符串 table_name,以及一个可选的字符串 schema,以对应于 ReflectedPrimaryKeyConstraint 字典的字典形式返回主键信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_pk_constraint().

方法 sqlalchemy.engine.default.DefaultDialect.get_schema_names(connection: Connection, **kw: Any) List[str]

继承自 Dialect.get_schema_names() 方法 Dialect

返回数据库中所有可用模式名称的列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_schema_names()

方法 sqlalchemy.engine.default.DefaultDialect.get_sequence_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

继承自 Dialect.get_sequence_names() 方法 Dialect

返回数据库中所有可用序列名称的列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_sequence_names()

参数:

schema – 要查询的模式名称,如果它不是默认模式。

版本 1.4 中的新功能。

方法 sqlalchemy.engine.default.DefaultDialect.get_table_comment(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) ReflectedTableComment

继承自 Dialect.get_table_comment() 方法 Dialect

返回由 table_name 标识的表的“注释”。

给定一个字符串 table_name 以及一个可选的字符串 schema,以对应于 ReflectedTableComment 字典的字典形式返回表注释信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_table_comment().

引发:

NotImplementedError 用于不支持注释的方言。

新功能版本 1.2。

方法 sqlalchemy.engine.default.DefaultDialect.get_table_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

继承自 Dialect.get_table_names() 方法 Dialect

返回 schema 的表名列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_table_names()

方法 sqlalchemy.engine.default.DefaultDialect.get_table_options(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) Dict[str, Any]

继承自 Dialect.get_table_options() 方法 Dialect

返回创建 table_name 时指定的选项的字典。

这是一个内部方言方法。应用程序应该使用 Inspector.get_table_options()

方法 sqlalchemy.engine.default.DefaultDialect.get_temp_table_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

继承自 Dialect.get_temp_table_names() 方法 Dialect

返回给定连接上的临时表名称列表,如果底层后端支持。

这是一个内部方言方法。应用程序应该使用 Inspector.get_temp_table_names()

方法 sqlalchemy.engine.default.DefaultDialect.get_temp_view_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

继承自 Dialect.get_temp_view_names() 方法 Dialect

返回给定连接上的临时视图名称列表,如果底层后端支持。

这是一个内部方言方法。应用程序应该使用 Inspector.get_temp_view_names()

方法 sqlalchemy.engine.default.DefaultDialect.get_unique_constraints(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedUniqueConstraint]

继承自 Dialect.get_unique_constraints() 方法 Dialect

返回 table_name 中唯一约束的信息。

给定一个字符串 table_name 和一个可选的字符串 schema,返回唯一约束信息,作为与 ReflectedUniqueConstraint 字典相对应的字典列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_unique_constraints().

方法 sqlalchemy.engine.default.DefaultDialect.get_view_definition(connection: Connection, view_name: str, schema: str | None = None, **kw: Any) str

继承自 Dialect.get_view_definition() 方法 Dialect

返回普通视图或物化视图定义。

这是一个内部方言方法。应用程序应该使用 Inspector.get_view_definition()

给定一个 Connection,一个字符串 view_name,和一个可选的字符串 schema,返回视图定义。

方法 sqlalchemy.engine.default.DefaultDialect.get_view_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

继承自 Dialect.get_view_names() 方法 Dialect

返回数据库中所有非物化视图名称的列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_view_names()

参数:

schema – 要查询的模式名称,如果不是默认模式。

method sqlalchemy.engine.default.DefaultDialect.has_index(connection, table_name, index_name, schema=None, **kw)

检查数据库中是否存在特定索引名称。

给定一个Connection 对象,一个字符串 table_name 和一个字符串索引名称,如果在给定表上存在给定名称的索引,则返回 True,否则返回 False

DefaultDialect 通过 Dialect.has_table()Dialect.get_indexes() 方法来实现此方法,但是方言可以实现更高效的版本。

这是一个内部方言方法。应用程序应使用 Inspector.has_index()

版本 1.4 中的新功能。

method sqlalchemy.engine.default.DefaultDialect.has_schema(connection: Connection, schema_name: str, **kw: Any) bool

检查数据库中是否存在特定模式名称。

给定一个Connection 对象,一个字符串 schema_name,如果存在给定模式,则返回 True,否则返回 False

DefaultDialect 通过检查 Dialect.get_schema_names() 返回的模式中是否存在 schema_name 来实现这一点,但是方言可以实现更高效的版本。

这是一个内部方言方法。应用程序应使用 Inspector.has_schema()

版本 2.0 中新增。

method sqlalchemy.engine.default.DefaultDialect.has_sequence(connection: Connection, sequence_name: str, schema: str | None = None, **kw: Any) bool

继承自 Dialect.has_sequence() 方法 Dialect

检查数据库中是否存在特定序列。

给定一个Connection 对象和一个字符串 sequence_name,如果给定序列存在于数据库中,则返回 True,否则返回 False

这是一个内部方言方法。应用程序应使用 Inspector.has_sequence()

method sqlalchemy.engine.default.DefaultDialect.has_table(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) bool

继承自 Dialect.has_table() 方法 Dialect

用于内部方言,检查数据库中是否存在特定表或视图。

给定一个Connection 对象,一个字符串 table_name 和可选的模式名称,如果给定表存在于数据库中,则返回 True,否则返回 False。

此方法充当面向公众的 Inspector.has_table() 方法的底层实现,并且还用于在内部实现 Table.create()MetaData.create_all() 等方法的“checkfirst”行为。

注意

此方法在 SQLAlchemy 内部使用,并且发布是为了让第三方方言提供实现。它不是用于检查表是否存在的面向公众的 API。请使用 Inspector.has_table() 方法。

版本 2.0 中的更改::: Dialect.has_table() 现在正式支持检查其他类似表的对象

  • 任何类型的视图(普通或物化的)

  • 任何类型的临时表

以前,这两个检查没有正式指定,不同的方言在行为上会有所不同。方言测试套件现在包含针对所有这些对象类型的测试,并且方言(在支持数据库支持视图或临时表的程度上)应努力支持找到这些对象以实现完全合规性。

attribute sqlalchemy.engine.default.DefaultDialect.has_terminate: bool = False

此方言是否具有不阻塞或不需要等待的单独“终止”实现。

attribute sqlalchemy.engine.default.DefaultDialect.identifier_preparer: IdentifierPreparer

此元素将引用 IdentifierPreparer 的一个实例,一旦 DefaultDialect 被构造。

classmethod sqlalchemy.engine.default.DefaultDialect.import_dbapi() module

继承自 Dialect.import_dbapi() 方法的 Dialect

导入此方言使用的 DBAPI 模块。

此处返回的 Python 模块对象将作为实例变量分配给构造的方言,名称为 .dbapi

在版本 2.0 中更改: The Dialect.import_dbapi() 类方法重命名自以前的方法 .Dialect.dbapi(),该方法将在方言实例化时被 DBAPI 模块本身替换,从而以两种不同的方式使用相同的名称。如果第三方方言上存在 .Dialect.dbapi() 类方法,它将被使用,并且会发出弃用警告。

attribute sqlalchemy.engine.default.DefaultDialect.include_set_input_sizes: Set[Any] | None = None

应包含在自动 cursor.setinputsizes() 调用中的 DBAPI 类型对象的集合。

这仅在 bind_typing 为 BindTyping.SET_INPUT_SIZES 时使用

method sqlalchemy.engine.default.DefaultDialect.initialize(connection)

在使用连接策略化创建方言时调用。

允许方言根据服务器版本信息或其他属性配置选项。

此处传递的连接是 SQLAlchemy Connection 对象,具有完整功能。

基本方言的 initialize() 方法应通过 super() 调用。

注意

从 SQLAlchemy 1.4 开始,此方法在任何 Dialect.on_connect() 钩子被调用之前调用。

attribute sqlalchemy.engine.default.DefaultDialect.inline_comments: bool = False

指示方言支持与表或列定义内联的注释 DDL。如果为 False,这意味着必须使用 ALTER 来设置表和列注释。

attribute sqlalchemy.engine.default.DefaultDialect.insert_executemany_returning: bool

方言/驱动程序/数据库支持某些方法,在使用 dialect.do_executemany() 时提供 INSERT…RETURNING 支持。

attribute sqlalchemy.engine.default.DefaultDialect.insert_executemany_returning_sort_by_parameter_order: bool

方言/驱动程序/数据库支持某些方法,在使用 dialect.do_executemany() 时,与 Insert.returning.sort_by_parameter_order 参数设置一起,提供 INSERT…RETURNING 支持。

attribute sqlalchemy.engine.default.DefaultDialect.insert_returning: bool = False

如果方言支持 INSERT 的 RETURNING。

版本 2.0 中新增。

attribute sqlalchemy.engine.default.DefaultDialect.insertmanyvalues_implicit_sentinel: InsertmanyvaluesSentinelOpts = symbol('NOT_SUPPORTED')

选项指示数据库支持某种形式的批量 INSERT,其中自动增量整数主键可以用作 INSERT 行的可靠排序。

版本 2.0.10 中的新增功能。

attribute sqlalchemy.engine.default.DefaultDialect.insertmanyvalues_max_parameters: int = 32700

insertmanyvalues_page_size 的替代方法,将根据语句中的参数总数额外限制页面大小。

attribute sqlalchemy.engine.default.DefaultDialect.insertmanyvalues_page_size: int = 1000

对于 ExecuteStyle.INSERTMANYVALUES 执行,将呈现到单个 INSERT..VALUES() 语句中的行数。

默认方言将此值默认为 1000。

版本 2.0 中新增。

另请参见

Connection.execution_options.insertmanyvalues_page_size - 在 Connection 上可用的执行选项,语句

attribute sqlalchemy.engine.default.DefaultDialect.is_async: bool = False

此方言是否适用于 asyncio。

method sqlalchemy.engine.default.DefaultDialect.is_disconnect(e, connection, cursor)

如果给定的 DB-API 错误指示连接无效,则返回 True。

attribute sqlalchemy.engine.default.DefaultDialect.label_length: int | None

可选的由用户定义的 SQL 标签最大长度。

classmethod sqlalchemy.engine.default.DefaultDialect.load_provisioning()

为该方言设置 provision.py 模块。

对于包含 provision.py 模块以设置配置跟随者的方言,此方法应该启动该过程。

典型的实现方式如下

@classmethod
def load_provisioning(cls):
    __import__("mydialect.provision")

默认方法假设在当前方言所属包内的名为provision.py的模块,该模块基于__module__属性

@classmethod
def load_provisioning(cls):
    package = ".".join(cls.__module__.split(".")[0:-1])
    try:
        __import__(package + ".provision")
    except ImportError:
        pass

版本 1.3.14 中的新增功能。

attribute sqlalchemy.engine.default.DefaultDialect.loaded_dbapi
attribute sqlalchemy.engine.default.DefaultDialect.max_identifier_length: int = 9999

标识符名称的最大长度。

attribute sqlalchemy.engine.default.DefaultDialect.name: str = 'default'

从 DBAPI 中立的角度(即 'sqlite')识别方言的名称。

method sqlalchemy.engine.default.DefaultDialect.normalize_name(name)

如果检测到不区分大小写,则将给定名称转换为小写。

此方法仅在方言定义 requires_name_normalize=True 时使用。

method sqlalchemy.engine.default.DefaultDialect.on_connect()

返回一个可调用函数,该函数设置新创建的 DBAPI 连接。

该可调用函数应该接受一个名为“conn”的参数,该参数是 DBAPI 连接本身。内部可调用函数没有返回值。

例如

class MyDialect(default.DefaultDialect):
    # ...

    def on_connect(self):
        def do_on_connect(connection):
            connection.execute("SET SPECIAL FLAGS etc")

        return do_on_connect

这用于设置方言范围内的每个连接选项,例如隔离模式、Unicode 模式等。

使用PoolEvents.connect()事件钩子调用“do_on_connect”可调用函数,然后解包 DBAPI 连接并将它传递到可调用函数中。

版本 1.4 中的更改: 对于方言的第一个连接,on_connect 钩子不再调用两次。但是,on_connect 钩子仍然在Dialect.initialize()方法之前调用。

版本 1.4.3 中的更改: on_connect 钩子是从一个名为 on_connect_url 的新方法中调用的,该方法传递了用于创建连接参数的 URL。如果方言需要用于连接的 URL 对象以获取更多上下文,则方言可以实现 on_connect_url 而不是 on_connect。

如果返回 None,则不会生成任何事件监听器。

返回值:

接受单个 DBAPI 连接作为参数的可调用函数,或 None。

另请参见

Dialect.connect() - 允许控制 DBAPI connect() 序列本身。

Dialect.on_connect_url() - 取代Dialect.on_connect()以接收上下文中的URL对象。

method sqlalchemy.engine.default.DefaultDialect.on_connect_url(url: URL) Callable[[Any], Any] | None

继承自 Dialect.on_connect_url() 方法 of Dialect

返回一个可调用函数,该函数设置新创建的 DBAPI 连接。

当由方言实现时,此方法是一个取代Dialect.on_connect()方法的新钩子。当没有由方言实现时,它直接调用Dialect.on_connect()方法,以保持与现有方言的兼容性。预计不会弃用Dialect.on_connect()

该可调用函数应该接受一个名为“conn”的参数,该参数是 DBAPI 连接本身。内部可调用函数没有返回值。

例如

class MyDialect(default.DefaultDialect):
    # ...

    def on_connect_url(self, url):
        def do_on_connect(connection):
            connection.execute("SET SPECIAL FLAGS etc")

        return do_on_connect

这用于设置方言范围内的每个连接选项,例如隔离模式、Unicode 模式等。

此方法与Dialect.on_connect()的区别在于,它传递了与连接参数相关的URL对象。通常,从Dialect.on_connect()钩子获取此对象的唯一方法是在Engine本身查找,但是此 URL 对象可能已被插件替换。

注意

Dialect.on_connect_url()的默认实现是调用Dialect.on_connect()方法。因此,如果方言实现了此方法,则除非覆盖方言从这里直接调用它,否则Dialect.on_connect()方法不会被调用

版本 1.4.3 中的新增功能: 添加了Dialect.on_connect_url(),它通常调用Dialect.on_connect()

参数:

url – 代表传递给Dialect.create_connect_args()方法的URL对象的URL

返回值:

接受单个 DBAPI 连接作为参数的可调用函数,或 None。

另请参见

Dialect.on_connect()

attribute sqlalchemy.engine.default.DefaultDialect.paramstyle: str

要使用的参数样式(某些 DB-API 支持多个参数样式)。

attribute sqlalchemy.engine.default.DefaultDialect.positional: bool

如果此 Dialect 的参数样式是位置样式,则为 True。

attribute sqlalchemy.engine.default.DefaultDialect.preexecute_autoincrement_sequences: bool = False

如果“隐式”主键函数必须单独执行才能获取其值,则为 True,前提是未使用 RETURNING。

这目前针对 PostgreSQL 而言,当implicit_returning=False参数在Table对象上使用时。

attribute sqlalchemy.engine.default.DefaultDialect.preparer

IdentifierPreparer的别名

attribute sqlalchemy.engine.default.DefaultDialect.reflection_options: Sequence[str] = ()

继承自 Dialect.reflection_options 属性 Dialect

表示字符串名称的序列,这些名称指示可以在 Table 对象上建立的关键字参数,这些参数将在使用 Table.autoload_with 时作为“反射选项”传递。

当前示例是 Oracle 方言中的“oracle_resolve_synonyms”。

method sqlalchemy.engine.default.DefaultDialect.reset_isolation_level(dbapi_conn)

给定一个 DBAPI 连接,将其隔离级别恢复为默认值。

请注意,这是一个方言级别的方法,用作 ConnectionEngine 隔离级别功能实现的一部分;对于大多数典型用例,应优先使用这些 API。

另请参见

Connection.get_isolation_level() - 查看当前级别

Connection.default_isolation_level - 查看默认级别

Connection.execution_options.isolation_level - 设置每个 Connection 隔离级别

create_engine.isolation_level - 设置每个 Engine 隔离级别

attribute sqlalchemy.engine.default.DefaultDialect.returns_native_bytes: bool = False

指示驱动程序是否为 SQL“二进制”数据类型以原生方式返回 Python bytes() 对象。

2.0.11 版中的新增内容。

attribute sqlalchemy.engine.default.DefaultDialect.sequences_optional: bool = False

如果为 True,则表示 Sequence.optional 参数在 Sequence 结构中应指示不生成 CREATE SEQUENCE。仅适用于支持序列的方言。目前仅用于允许 PostgreSQL SERIAL 用于在指定 Sequence() 的列上,以便在其他后端使用。

attribute sqlalchemy.engine.default.DefaultDialect.server_side_cursors: bool = False

已弃用;指示方言是否应该尝试默认使用服务器端游标

attribute sqlalchemy.engine.default.DefaultDialect.server_version_info: Tuple[Any, ...] | None = None

包含正在使用的 DB 后端版本号的元组。

此值仅适用于支持的方言,通常在与数据库的初始连接期间填充。

method sqlalchemy.engine.default.DefaultDialect.set_connection_execution_options(connection: Connection, opts: Mapping[str, Any]) None

为给定连接建立执行选项。

这是由 DefaultDialect 实现的,以便实现 Connection.execution_options.isolation_level 执行选项。方言可以拦截各种执行选项,这些选项可能需要修改特定 DBAPI 连接上的状态。

版本 1.4 中的新功能。

method sqlalchemy.engine.default.DefaultDialect.set_engine_execution_options(engine: Engine, opts: Mapping[str, Any]) None

为给定引擎建立执行选项。

这是由 DefaultDialect 实现的,以便为给定 Engine 创建的新的 Connection 实例建立事件钩子,然后将调用该连接的 Dialect.set_connection_execution_options() 方法。

method sqlalchemy.engine.default.DefaultDialect.set_isolation_level(dbapi_connection: DBAPIConnection, level: Literal['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED', 'READ UNCOMMITTED', 'AUTOCOMMIT']) None

继承自 Dialect.set_isolation_level() 方法 Dialect

给定一个 DBAPI 连接,设置其隔离级别。

请注意,这是一个方言级别的方法,用作 ConnectionEngine 隔离级别功能实现的一部分;对于大多数典型用例,应优先使用这些 API。

如果方言还实现了 Dialect.get_isolation_level_values() 方法,那么给定的级别保证是该序列中字符串名称之一,并且该方法将不需要预期查找失败。

另请参见

Connection.get_isolation_level() - 查看当前级别

Connection.default_isolation_level - 查看默认级别

Connection.execution_options.isolation_level - 设置每个 Connection 隔离级别

create_engine.isolation_level - 设置每个 Engine 隔离级别

attribute sqlalchemy.engine.default.DefaultDialect.statement_compiler

别名 SQLCompiler

attribute sqlalchemy.engine.default.DefaultDialect.supports_alter: bool = True

如果数据库支持 ALTER TABLE 则为 True - 仅用于在某些情况下生成外键约束

attribute sqlalchemy.engine.default.DefaultDialect.supports_comments: bool = False

指示方言支持表和列上的注释 DDL。

attribute sqlalchemy.engine.default.DefaultDialect.supports_constraint_comments: bool = False

指示方言是否支持约束上的注释 DDL。

attribute sqlalchemy.engine.default.DefaultDialect.supports_default_metavalue: bool = False

方言支持 INSERT… VALUES (DEFAULT) 语法

attribute sqlalchemy.engine.default.DefaultDialect.supports_default_values: bool = False

方言支持 INSERT… DEFAULT VALUES 语法

attribute sqlalchemy.engine.default.DefaultDialect.supports_empty_insert: bool = True

方言支持 INSERT () VALUES ()

attribute sqlalchemy.engine.default.DefaultDialect.supports_identity_columns: bool = False

目标数据库支持 IDENTITY

attribute sqlalchemy.engine.default.DefaultDialect.supports_multivalues_insert: bool = False

目标数据库支持带有多个值集的 INSERT…VALUES,例如 INSERT INTO table (cols) VALUES (…), (…), (…), …

attribute sqlalchemy.engine.default.DefaultDialect.supports_native_boolean: bool = False

指示方言是否支持原生布尔结构。这将阻止 Boolean 在使用该类型时生成 CHECK 约束。

attribute sqlalchemy.engine.default.DefaultDialect.supports_native_decimal: bool = False

指示是否为精确数值类型处理和返回 Decimal 对象,或者是否返回浮点数。

attribute sqlalchemy.engine.default.DefaultDialect.supports_native_enum: bool = False

指示方言是否支持原生 ENUM 结构。这将阻止 Enum 在以“原生”模式使用该类型时生成 CHECK 约束。

attribute sqlalchemy.engine.default.DefaultDialect.supports_native_uuid: bool = False

指示驱动程序是否为 SQL UUID 数据类型原生处理 Python UUID() 对象。

版本 2.0 中新增。

attribute sqlalchemy.engine.default.DefaultDialect.supports_sane_multi_rowcount: bool = True

指示方言是否在通过 executemany 执行 UPDATEDELETE 语句时正确实现 rowcount。

attribute sqlalchemy.engine.default.DefaultDialect.supports_sane_rowcount: bool = True

指示方言是否正确实现 UPDATEDELETE 语句的 rowcount。

attribute sqlalchemy.engine.default.DefaultDialect.supports_sane_rowcount_returning

如果此方言即使在使用 RETURNING 时也支持正确的 rowcount,则为 True。

对于不支持 RETURNING 的方言,这与 supports_sane_rowcount 同义。

attribute sqlalchemy.engine.default.DefaultDialect.supports_sequences: bool = False

指示方言是否支持 CREATE SEQUENCE 或类似的命令。

attribute sqlalchemy.engine.default.DefaultDialect.supports_server_side_cursors: bool = False

指示方言是否支持服务器端游标

attribute sqlalchemy.engine.default.DefaultDialect.supports_simple_order_by_label: bool = True

目标数据库支持 ORDER BY <labelname>,其中 <labelname> 指的是 SELECT 语句的 columns 子句中的标签

attribute sqlalchemy.engine.default.DefaultDialect.supports_statement_cache: bool = True

指示此方言是否支持缓存。

所有与语句缓存兼容的方言都应该直接在每个支持缓存的方言类及其子类上将此标志设置为 True。SQLAlchemy 会在使用语句缓存之前测试此标志是否在每个方言子类上本地存在。这是为了为尚未完全测试以符合 SQL 语句缓存的旧有方言或新方言提供安全性。

版本 1.4.5 中的新增功能。

属性 sqlalchemy.engine.default.DefaultDialect.tuple_in_values: bool = False

目标数据库支持元组 IN,例如 (x, y) IN ((q, p), (r, z))

属性 sqlalchemy.engine.default.DefaultDialect.type_compiler: Any

遗留;这是类级别的 TypeCompiler 类,实例级别的 TypeCompiler 实例。

请参阅 type_compiler_instance 代替。

属性 sqlalchemy.engine.default.DefaultDialect.type_compiler_cls

GenericTypeCompiler 的别名

属性 sqlalchemy.engine.default.DefaultDialect.type_compiler_instance: TypeCompiler

Compiled 类的实例,用于编译 SQL 类型对象

版本 2.0 中新增。

方法 sqlalchemy.engine.default.DefaultDialect.type_descriptor(typeobj)

提供数据库特定的 TypeEngine 对象,从 types 模块获取通用对象。

此方法查找名为 colspecs 的字典作为类或实例级别的变量,并传递给 adapt_type()

属性 sqlalchemy.engine.default.DefaultDialect.update_executemany_returning: bool = False

方言支持 UPDATE..RETURNING 与 executemany 一起使用。

属性 sqlalchemy.engine.default.DefaultDialect.update_returning: bool = False

如果方言支持 UPDATE 时的 RETURNING

版本 2.0 中新增。

属性 sqlalchemy.engine.default.DefaultDialect.update_returning_multifrom: bool = False

如果方言支持 UPDATE..FROM 时的 RETURNING

版本 2.0 中新增。

属性 sqlalchemy.engine.default.DefaultDialect.use_insertmanyvalues: bool = False

如果为 True,则表示应使用“insertmanyvalues”功能来允许 insert_executemany_returning 行为,如果可能。

实际上,将此设置为 True 意味着

如果 supports_multivalues_insertinsert_returninguse_insertmanyvalues 都为 True,SQL 编译器将生成一个 INSERT,它将被 DefaultDialect 解释为 ExecuteStyle.INSERTMANYVALUES 执行,它允许使用 RETURNING 插入多行,通过将单行 INSERT 语句重写为具有多个 VALUES 子句,并且在给定大量行时,对一系列批次执行多次语句。

该参数对于默认方言为 False,对于 SQLAlchemy 内部方言 SQLite、MySQL/MariaDB、PostgreSQL、SQL Server 则设置为 True。对于 Oracle,它仍然为 False,Oracle 提供了本机的“使用 RETURNING 的 executemany”支持,并且也不支持 supports_multivalues_insert。对于 MySQL/MariaDB,不支持 RETURNING 的那些 MySQL 方言不会将 insert_executemany_returning 报告为 True。

版本 2.0 中新增。

属性 sqlalchemy.engine.default.DefaultDialect.use_insertmanyvalues_wo_returning: bool = False

如果为 True,并且 use_insertmanyvalues 也为 True,不包含 RETURNING 的 INSERT 语句也将使用“insertmanyvalues”。

版本 2.0 中新增。

sqlalchemy.engine.Dialect

定义特定数据库和 DB-API 组合的行为。

元数据定义、SQL 查询生成、执行、结果集处理或任何其他在数据库之间变化的方面都定义在方言的通用类别下。方言充当其他数据库特定对象实现(包括 ExecutionContext、Compiled、DefaultGenerator 和 TypeEngine)的工厂。

注意

第三方方言不应直接子类化 Dialect。相反,应该子类化 DefaultDialect 或其后代类。

成员

bind_typing, colspecs, connect(), construct_arguments, create_connect_args(), create_xid(), cte_follows_insert, dbapi, dbapi_exception_translation_map, ddl_compiler, default_isolation_level, default_metavalue_token, default_schema_name, default_sequence_base, delete_executemany_returning, delete_returning, delete_returning_multifrom, denormalize_name(), div_is_floordiv, do_begin(), do_begin_twophase(), do_close(), do_commit(), do_commit_twophase(), do_execute(), do_execute_no_params(), do_executemany(), do_ping(), do_prepare_twophase(), do_recover_twophase(), do_release_savepoint(), do_rollback(), do_rollback_to_savepoint(), do_rollback_twophase(), do_savepoint(), do_set_input_sizes(), do_terminate(), driver, engine_config_types, engine_created(), exclude_set_input_sizes, execute_sequence_format, execution_ctx_cls, favor_returning_over_lastrowid, get_async_dialect_cls(), get_check_constraints(), get_columns(), get_default_isolation_level(), get_dialect_cls(), get_dialect_pool_class(), get_driver_connection(), get_foreign_keys(), get_indexes(), get_isolation_level(), get_isolation_level_values(), get_materialized_view_names(), get_multi_check_constraints(), get_multi_columns(), get_multi_foreign_keys(), get_multi_indexes(), get_multi_pk_constraint(), get_multi_table_comment(), get_multi_table_options(), get_multi_unique_constraints(), get_pk_constraint(), get_schema_names(), get_sequence_names(), get_table_comment(), get_table_names(), get_table_options(), get_temp_table_names(), get_temp_view_names(), get_unique_constraints(), get_view_definition(), get_view_names(), has_index(), has_schema(), has_sequence(), has_table(), has_terminate, identifier_preparer, import_dbapi(), include_set_input_sizes, initialize(), inline_comments, insert_executemany_returning, insert_executemany_returning_sort_by_parameter_order, insert_returning, insertmanyvalues_implicit_sentinel, insertmanyvalues_max_parameters, insertmanyvalues_page_size, is_async, is_disconnect(), label_length, load_provisioning(), loaded_dbapi, max_identifier_length, name, normalize_name(), on_connect(), on_connect_url(), paramstyle, positional, preexecute_autoincrement_sequences, preparer, reflection_options, reset_isolation_level(), returns_native_bytes, sequences_optional, server_side_cursors, server_version_info, set_connection_execution_options(), set_engine_execution_options(), set_isolation_level(), statement_compiler, supports_alter, supports_comments, supports_constraint_comments, supports_default_metavalue, supports_default_values, supports_empty_insert, supports_identity_columns, supports_multivalues_insert, supports_native_boolean, supports_native_decimal, supports_native_enum, supports_native_uuid, supports_sane_multi_rowcount, supports_sane_rowcount, supports_sequences, supports_server_side_cursors, supports_simple_order_by_label, supports_statement_cache, tuple_in_values, type_compiler, type_compiler_cls, type_compiler_instance, type_descriptor(), update_executemany_returning, update_returning, update_returning_multifrom, use_insertmanyvalues, use_insertmanyvalues_wo_returning

类签名

sqlalchemy.engine.Dialect (sqlalchemy.event.registry.EventTarget)

属性 sqlalchemy.engine.Dialect.bind_typing = 1

定义将类型信息传递给数据库和/或驱动程序以进行绑定参数的方法。

请参阅 BindTyping 以了解值。

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.colspecs: MutableMapping[Type[TypeEngine[Any]], Type[TypeEngine[Any]]]

来自 sqlalchemy.types 的 TypeEngine 类映射到特定于方言类的子类的字典。此字典仅在类级别,不会从方言实例本身访问。

方法 sqlalchemy.engine.Dialect.connect(*cargs: Any, **cparams: Any) DBAPIConnection

使用此方言的 DBAPI 建立连接。

此方法的默认实现是

def connect(self, *cargs, **cparams):
    return self.dbapi.connect(*cargs, **cparams)

参数 *cargs, **cparams 直接从该方言的 Dialect.create_connect_args() 方法生成。

该方法可用于当从 DBAPI 获取新连接时需要执行按连接编程步骤的方言。

参数:
返回值:

一个 DBAPI 连接,通常来自 PEP 249 模块级 .connect() 函数。

attribute sqlalchemy.engine.Dialect.construct_arguments: List[Tuple[Type[SchemaItem | ClauseElement], Mapping[str, Any]]] | None = None

各种 SQLAlchemy 结构(通常是模式项)的可选参数规范集。

要实现,请建立一系列元组,如下所示

construct_arguments = [
    (schema.Index, {
        "using": False,
        "where": None,
        "ops": None
    })
]

如果上述结构在 PostgreSQL 方言上建立,则 Index 结构现在将接受关键字参数 postgresql_usingpostgresql_wherepostgresql_ops。任何其他指定给 Index 构造函数的参数,如果以 postgresql_ 为前缀,则会引发 ArgumentError

没有包含 construct_arguments 成员的方言将不会参与参数验证系统。对于这样的方言,所有参与的结构都接受任何参数名称,在以该方言名称为前缀的参数命名空间内。这里的理由是,尚未实现此功能的第三方方言继续以旧的方式运行。

另请参见

DialectKWArgs - 实现消耗 DefaultDialect.construct_arguments 的基类

method sqlalchemy.engine.Dialect.create_connect_args(url: URL) ConnectArgsType

构建与 DBAPI 兼容的连接参数。

给定一个 URL 对象,返回一个包含 (*args, **kwargs) 的元组,适合直接发送到 dbapi 的 connect 函数。这些参数被发送到 Dialect.connect() 方法,该方法然后运行 DBAPI 级别的 connect() 函数。

该方法通常利用 URL.translate_connect_args() 方法来生成选项字典。

默认实现为

def create_connect_args(self, url):
    opts = url.translate_connect_args()
    opts.update(url.query)
    return ([], opts)
参数:

url – 一个 URL 对象

返回值:

将传递给 Dialect.connect() 方法的 (*args, **kwargs) 元组。

method sqlalchemy.engine.Dialect.create_xid() Any

创建一个两阶段事务 ID。

此 ID 将传递给 do_begin_twophase()、do_rollback_twophase()、do_commit_twophase()。它的格式未指定。

attribute sqlalchemy.engine.Dialect.cte_follows_insert: bool

目标数据库,当给定一个带有 INSERT 语句的 CTE 时,需要将 CTE 放在 INSERT 之后

attribute sqlalchemy.engine.Dialect.dbapi: ModuleType | None

对 DBAPI 模块对象本身的引用。

SQLAlchemy 方言使用类方法 Dialect.import_dbapi() 导入 DBAPI 模块。这样做的理由是,任何方言模块都可以导入并用于生成 SQL 语句,而无需实际安装 DBAPI 驱动程序。只有当使用 Engine 构造 create_engine() 时,才会导入 DBAPI;此时,创建过程将 DBAPI 模块分配给此属性。

因此,方言应该实现 Dialect.import_dbapi(),它将导入必要的模块并返回它,然后在方言代码中引用 self.dbapi 来引用 DBAPI 模块的内容。

在版本 The 中更改: Dialect.dbapi 属性专门用作对 DBAPI 模块的每个 Dialect 实例的引用。以前未完全记录的 .Dialect.dbapi() 类方法已弃用,并由 Dialect.import_dbapi() 替换。

attribute sqlalchemy.engine.Dialect.dbapi_exception_translation_map: Mapping[str, str] = {}

一个名称字典,该字典将包含 pep-249 异常(“IntegrityError”、“OperationalError”等)的名称作为值,并以备用类名作为键,以支持 DBAPI 具有未按引用方式命名的异常类的情况(例如 IntegrityError = MyException)。在绝大多数情况下,此字典为空。

attribute sqlalchemy.engine.Dialect.ddl_compiler: Type[DDLCompiler]

一个 Compiled 类,用于编译 DDL 语句

attribute sqlalchemy.engine.Dialect.default_isolation_level: IsolationLevel | None

新连接隐式存在的隔离级别。

attribute sqlalchemy.engine.Dialect.default_metavalue_token: str = 'DEFAULT'

对于 INSERT… VALUES (DEFAULT) 语法,括号中要放置的标记。

例如,对于 SQLite,这是关键字“NULL”。

attribute sqlalchemy.engine.Dialect.default_schema_name: str | None

默认模式的名称。此值仅适用于支持的方言,通常在首次连接到数据库时填充。

attribute sqlalchemy.engine.Dialect.default_sequence_base: int

将作为 CREATE SEQUENCE DDL 语句的“START WITH”部分呈现的默认值。

attribute sqlalchemy.engine.Dialect.delete_executemany_returning: bool

方言支持使用 executemany 的 DELETE..RETURNING。

attribute sqlalchemy.engine.Dialect.delete_returning: bool

如果方言支持使用 DELETE 的 RETURNING。

版本 2.0 中新增。

attribute sqlalchemy.engine.Dialect.delete_returning_multifrom: bool

如果方言支持使用 DELETE..FROM 的 RETURNING。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.denormalize_name(name: str) str

如果给定的名称是全小写,则将其转换为后端的区分大小写标识符。

此方法仅在方言定义 requires_name_normalize=True 时使用。

attribute sqlalchemy.engine.Dialect.div_is_floordiv: bool

目标数据库将 / 除法运算符视为“向下取整除法”。

method sqlalchemy.engine.Dialect.do_begin(dbapi_connection: PoolProxiedConnection) None

提供 connection.begin() 的实现,给定一个 DB-API 连接。

DBAPI 没有专门的“begin”方法,并且预计事务是隐式的。此钩子提供给那些可能需要这方面额外帮助的 DBAPI。

参数:

dbapi_connection – 一个 DBAPI 连接,通常在 ConnectionFairy 中代理。

method sqlalchemy.engine.Dialect.do_begin_twophase(connection: Connection, xid: Any) None

在给定的连接上开始两阶段事务。

参数:
method sqlalchemy.engine.Dialect.do_close(dbapi_connection: DBAPIConnection) None

提供 connection.close() 的实现,给定一个 DB-API 连接。

此钩子由 Pool 在连接从池中分离或被返回到超出池正常容量时调用。

method sqlalchemy.engine.Dialect.do_commit(dbapi_connection: PoolProxiedConnection) None

提供 connection.commit() 的实现,给定一个 DB-API 连接。

参数:

dbapi_connection – 一个 DBAPI 连接,通常代理在 ConnectionFairy 中。

method sqlalchemy.engine.Dialect.do_commit_twophase(connection: Connection, xid: Any, is_prepared: bool = True, recover: bool = False) None

在给定的连接上提交两阶段事务。

参数:
method sqlalchemy.engine.Dialect.do_execute(cursor: DBAPICursor, statement: str, parameters: Sequence[Any] | Mapping[str, Any] | None, context: ExecutionContext | None = None) None

提供 cursor.execute(statement, parameters) 的实现。

method sqlalchemy.engine.Dialect.do_execute_no_params(cursor: DBAPICursor, statement: str, context: ExecutionContext | None = None) None

提供 cursor.execute(statement) 的实现。

参数集合不应发送。

method sqlalchemy.engine.Dialect.do_executemany(cursor: DBAPICursor, statement: str, parameters: Sequence[Sequence[Any]] | Sequence[Mapping[str, Any]], context: ExecutionContext | None = None) None

提供 cursor.executemany(statement, parameters) 的实现。

method sqlalchemy.engine.Dialect.do_ping(dbapi_connection: DBAPIConnection) bool

ping DBAPI 连接,如果连接可用则返回 True。

method sqlalchemy.engine.Dialect.do_prepare_twophase(connection: Connection, xid: Any) None

在给定连接上准备一个两阶段事务。

参数:
method sqlalchemy.engine.Dialect.do_recover_twophase(connection: Connection) List[Any]

恢复给定连接上未提交的已准备好的两阶段事务标识符列表。

参数:

connectionConnection.

method sqlalchemy.engine.Dialect.do_release_savepoint(connection: Connection, name: str) None

在连接上释放命名保存点。

参数:
method sqlalchemy.engine.Dialect.do_rollback(dbapi_connection: PoolProxiedConnection) None

提供 connection.rollback() 的实现,给定一个 DB-API 连接。

参数:

dbapi_connection – DBAPI 连接,通常被代理在 ConnectionFairy 中。

method sqlalchemy.engine.Dialect.do_rollback_to_savepoint(connection: Connection, name: str) None

将连接回滚到命名的保存点。

参数:
method sqlalchemy.engine.Dialect.do_rollback_twophase(connection: Connection, xid: Any, is_prepared: bool = True, recover: bool = False) None

回滚给定连接上的两阶段事务。

参数:
method sqlalchemy.engine.Dialect.do_savepoint(connection: Connection, name: str) None

创建具有给定名称的保存点。

参数:
method sqlalchemy.engine.Dialect.do_set_input_sizes(cursor: DBAPICursor, list_of_tuples: _GenericSetInputSizesType, context: ExecutionContext) Any

使用适当的参数调用 cursor.setinputsizes() 方法

如果 Dialect.bind_typing 属性设置为 BindTyping.SETINPUTSIZES 值,则会调用此钩子。参数数据以元组列表传递(paramname,dbtype,sqltype),其中 paramname 是语句中参数的键,dbtype 是 DBAPI 数据类型,sqltype 是 SQLAlchemy 类型。元组的顺序是正确的参数顺序。

版本 1.4 中的新功能。

在版本 2.0 中更改: - 通过将 Dialect.bind_typing 设置为 BindTyping.SETINPUTSIZES 来启用 setinputsizes 模式。接受 use_setinputsizes 参数的方言应该相应地设置此值。

method sqlalchemy.engine.Dialect.do_terminate(dbapi_connection: DBAPIConnection) None

提供 connection.close() 的实现,该实现尽可能地尝试不阻塞,给定 DBAPI 连接。

在绝大多数情况下,这只是调用 .close(),但是对于某些 asyncio 方言来说,可能会调用不同的 API 特性。

此钩子由 Pool 在回收连接或连接已失效时调用。

在版本 1.4.41 中新添加。

attribute sqlalchemy.engine.Dialect.driver: str

方言的 DBAPI 的标识名称

attribute sqlalchemy.engine.Dialect.engine_config_types: Mapping[str, Any]

字符串键的映射,这些键可以链接到类型转换函数的引擎配置中。

classmethod sqlalchemy.engine.Dialect.engine_created(engine: Engine) None

在返回最终 Engine 之前调用的一个便利钩子。

如果返回的方言与 get_dialect_cls() 方法返回的类不同,则会在两个类上调用钩子,首先是在 get_dialect_cls() 方法返回的方言类上,然后是在调用该方法的类上。

钩子应该由方言和/或包装器用来对引擎或其组件应用特殊事件。特别是,它允许方言包装类应用方言级别的事件。

attribute sqlalchemy.engine.Dialect.exclude_set_input_sizes: Set[Any] | None

DBAPI 类型对象的集合,这些对象应该在自动 cursor.setinputsizes() 调用中排除。

这仅在 bind_typing 为 BindTyping.SET_INPUT_SIZES 时使用

attribute sqlalchemy.engine.Dialect.execute_sequence_format: Type[Tuple[Any, ...]] | Type[Tuple[List[Any]]]

‘tuple’ 或 ‘list’ 类型,具体取决于 cursor.execute() 接受的第二个参数(两者有所不同)。

attribute sqlalchemy.engine.Dialect.execution_ctx_cls: Type[ExecutionContext]

用于处理语句执行的 ExecutionContext 类。

attribute sqlalchemy.engine.Dialect.favor_returning_over_lastrowid: bool

对于支持 lastrowid 和 RETURNING 插入策略的后端,对于简单的单整型主键插入,优先使用 RETURNING。

在大多数后端上,cursor.lastrowid 的性能往往更高。

classmethod sqlalchemy.engine.Dialect.get_async_dialect_cls(url: URL) Type[Dialect]

给定一个 URL,返回异步引擎将使用的 Dialect

默认情况下,它是 Dialect.get_dialect_cls() 的别名,只返回 cls。如果方言在相同名称下提供同步和异步版本,例如 psycopg 驱动程序,则可以使用它。

版本 2 中的新功能。

method sqlalchemy.engine.Dialect.get_check_constraints(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedCheckConstraint]

返回关于 table_name 中检查约束的信息。

给定一个字符串 table_name 和一个可选的字符串 schema,以与 ReflectedCheckConstraint 字典相对应的字典列表形式返回检查约束信息。

这是一个内部方言方法。应用程序应使用 Inspector.get_check_constraints()

method sqlalchemy.engine.Dialect.get_columns(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedColumn]

返回关于 table_name 中列的信息。

给定一个 Connection、一个字符串 table_name 和一个可选的字符串 schema,以与 ReflectedColumn 字典相对应的字典列表形式返回列信息。

这是一个内部方言方法。应用程序应使用 Inspector.get_columns()

method sqlalchemy.engine.Dialect.get_default_isolation_level(dbapi_conn: DBAPIConnection) Literal['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED', 'READ UNCOMMITTED', 'AUTOCOMMIT']

给定一个 DBAPI 连接,返回其隔离级别,或者如果无法检索,则返回默认隔离级别。

此方法可能只抛出 NotImplementedError,且**不得抛出任何其他异常**,因为它在首次连接时会被隐式使用。

对于支持隔离级别设置的方言,此方法**必须返回值**,因为此级别是在进行每个连接隔离级别更改时要恢复的级别。

该方法默认使用 Dialect.get_isolation_level() 方法,除非被方言覆盖。

版本 1.3.22 中的新功能。

classmethod sqlalchemy.engine.Dialect.get_dialect_cls(url: URL) Type[Dialect]

给定一个 URL,返回将使用的 Dialect

这是一个钩子,允许外部插件通过允许从 URL 中加载插件(基于入口点)并返回要使用的实际方言来提供现有方言周围的功能。

默认情况下,它只返回 cls。

method sqlalchemy.engine.Dialect.get_dialect_pool_class(url: URL) Type[Pool]

返回给定 URL 要使用的 Pool 类。

方法 sqlalchemy.engine.Dialect.get_driver_connection(connection: DBAPIConnection) Any

返回由外部驱动程序包返回的连接对象。

对于使用符合 DBAPI 的驱动程序的普通方言,此调用将只返回作为参数传递的 connection。对于改为调整非 DBAPI 兼容驱动程序的方言,例如在调整 asyncio 驱动程序时,此调用将返回驱动程序返回的连接类对象。

新版 1.4.24 中的新增功能。

方法 sqlalchemy.engine.Dialect.get_foreign_keys(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedForeignKeyConstraint]

返回有关 table_name 中外键的信息。

给定一个 Connection、字符串 table_name 以及可选的字符串 schema,返回外键信息,以与 ReflectedForeignKeyConstraint 字典对应的字典列表形式。

这是一个内部方言方法。应用程序应使用 Inspector.get_foreign_keys()

方法 sqlalchemy.engine.Dialect.get_indexes(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedIndex]

返回有关 table_name 中索引的信息。

给定一个 Connection、字符串 table_name 以及可选的字符串 schema,返回索引信息,以与 ReflectedIndex 字典对应的字典列表形式。

这是一个内部方言方法。应用程序应使用 Inspector.get_indexes().

方法 sqlalchemy.engine.Dialect.get_isolation_level(dbapi_connection: DBAPIConnection) Literal['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED', 'READ UNCOMMITTED', 'AUTOCOMMIT']

给定一个 DBAPI 连接,返回其隔离级别。

在使用 Connection 对象时,可以使用 Connection.connection 访问器获取相应的 DBAPI 连接。

请注意,这是一个方言级别的方法,用作 ConnectionEngine 隔离级别功能实现的一部分;对于大多数典型用例,应优先使用这些 API。

另请参见

Connection.get_isolation_level() - 查看当前级别

Connection.default_isolation_level - 查看默认级别

Connection.execution_options.isolation_level - 设置每个 Connection 隔离级别

create_engine.isolation_level - 设置每个 Engine 隔离级别

方法 sqlalchemy.engine.Dialect.get_isolation_level_values(dbapi_conn: DBAPIConnection) List[Literal['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED', 'READ UNCOMMITTED', 'AUTOCOMMIT']]

返回此方言接受的字符串隔离级别名称序列。

可用名称应使用以下约定

  • 使用大写名称。隔离级别方法将接受小写名称,但这些名称将在传递给方言之前被规范化为大写。

  • 单独的词语应该用空格隔开,而不是下划线,例如 REPEATABLE READ。隔离级别名称将在传递给方言之前将下划线转换为空格。

  • 如果后端支持四个标准隔离级别的名称,则这些名称应为 READ UNCOMMITTED READ COMMITTED, REPEATABLE READ, SERIALIZABLE

  • 如果方言支持自动提交选项,则应使用隔离级别名称 AUTOCOMMIT 提供。

  • 其他隔离模式也可能存在,前提是它们以大写字母命名并使用空格而不是下划线。

此函数用于使默认方言可以检查给定的隔离级别参数是否有效,否则会引发 ArgumentError

一个 DBAPI 连接被传递给该方法,在方言需要查询连接本身以确定此列表的极不可能的情况下,但预计大多数后端将返回一个硬编码的值列表。如果方言支持“AUTOCOMMIT”,则该值也应存在于返回的序列中。

默认情况下,该方法会引发 NotImplementedError。如果方言没有实现此方法,则默认方言不会在将给定的隔离级别值传递给 Dialect.set_isolation_level() 方法之前对其进行任何检查。这是为了允许与可能尚未实现此方法的第三方方言向后兼容。

版本 2.0 中新增。

方法 sqlalchemy.engine.Dialect.get_materialized_view_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

返回数据库中所有可用的物化视图名称列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_materialized_view_names()

参数:

schema

要查询的模式名称,如果它不是默认模式。

版本 2.0 中新增。

方法 sqlalchemy.engine.Dialect.get_multi_check_constraints(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] | None = None, **kw: Any) Iterable[Tuple[TableKey, List[ReflectedCheckConstraint]]]

返回给定 schema 中所有表中的检查约束的信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_check_constraints().

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_multi_columns(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] | None = None, **kw: Any) Iterable[Tuple[TableKey, List[ReflectedColumn]]]

返回给定 schema 中所有表中的列信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_columns().

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_multi_foreign_keys(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] | None = None, **kw: Any) Iterable[Tuple[TableKey, List[ReflectedForeignKeyConstraint]]]

返回给定 schema 中所有表中的外键信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_foreign_keys()

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_multi_indexes(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] | None = None, **kw: Any) Iterable[Tuple[TableKey, List[ReflectedIndex]]]

返回给定 schema 中所有表中的索引信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_indexes().

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_multi_pk_constraint(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] |

返回给定 schema 中所有表中的主键约束信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_pk_constraint().

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_multi_table_comment(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] | None = None, **kw: Any) Iterable[Tuple[TableKey, ReflectedTableComment]]

返回给定 schema 中所有表中的表注释信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_table_comment()

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_multi_table_options(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] | None = None, **kw: Any) Iterable[Tuple[TableKey, Dict[str, Any]]]

返回在创建给定模式中的表时指定的选项字典。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_table_options()

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_multi_unique_constraints(connection: Connection, *, schema: str | None = None, filter_names: Collection[str] | None = None, **kw: Any) Iterable[Tuple[TableKey, List[ReflectedUniqueConstraint]]]

返回给定 schema 中所有表中的唯一约束信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_multi_unique_constraints().

注意

DefaultDialect 提供了一个默认的实现,将调用单个表方法以获取 Dialect.get_table_names()Dialect.get_view_names()Dialect.get_materialized_view_names() 返回的每个对象,具体取决于提供的 kind。希望支持更快实现的方言应该实现此方法。

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.get_pk_constraint(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) ReflectedPrimaryKeyConstraint

返回关于 table_name 的主键约束信息。

给定一个 Connection,一个字符串 table_name,以及一个可选的字符串 schema,以对应于 ReflectedPrimaryKeyConstraint 字典的字典形式返回主键信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_pk_constraint().

method sqlalchemy.engine.Dialect.get_schema_names(connection: Connection, **kw: Any) List[str]

返回数据库中所有可用模式名称的列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_schema_names()

method sqlalchemy.engine.Dialect.get_sequence_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

返回数据库中所有可用序列名称的列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_sequence_names()

参数:

schema – 要查询的模式名称,如果它不是默认模式。

版本 1.4 中的新功能。

method sqlalchemy.engine.Dialect.get_table_comment(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) ReflectedTableComment

返回由 table_name 标识的表的“注释”。

给定一个字符串 table_name 以及一个可选的字符串 schema,以对应于 ReflectedTableComment 字典的字典形式返回表注释信息。

这是一个内部方言方法。应用程序应该使用 Inspector.get_table_comment().

引发:

NotImplementedError 用于不支持注释的方言。

新功能版本 1.2。

method sqlalchemy.engine.Dialect.get_table_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

返回 schema 的表名列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_table_names()

method sqlalchemy.engine.Dialect.get_table_options(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) Dict[str, Any]

返回创建 table_name 时指定的选项的字典。

这是一个内部方言方法。应用程序应该使用 Inspector.get_table_options()

method sqlalchemy.engine.Dialect.get_temp_table_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

返回给定连接上的临时表名称列表,如果底层后端支持。

这是一个内部方言方法。应用程序应该使用 Inspector.get_temp_table_names()

method sqlalchemy.engine.Dialect.get_temp_view_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

返回给定连接上的临时视图名称列表,如果底层后端支持。

这是一个内部方言方法。应用程序应该使用 Inspector.get_temp_view_names()

method sqlalchemy.engine.Dialect.get_unique_constraints(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) List[ReflectedUniqueConstraint]

返回 table_name 中唯一约束的信息。

给定一个字符串 table_name 和一个可选的字符串 schema,返回唯一约束信息,作为与 ReflectedUniqueConstraint 字典相对应的字典列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_unique_constraints().

method sqlalchemy.engine.Dialect.get_view_definition(connection: Connection, view_name: str, schema: str | None = None

返回普通视图或物化视图定义。

这是一个内部方言方法。应用程序应该使用 Inspector.get_view_definition()

给定一个 Connection,一个字符串 view_name,和一个可选的字符串 schema,返回视图定义。

method sqlalchemy.engine.Dialect.get_view_names(connection: Connection, schema: str | None = None, **kw: Any) List[str]

返回数据库中所有非物化视图名称的列表。

这是一个内部方言方法。应用程序应该使用 Inspector.get_view_names()

参数:

schema – schema name to query, if not the default schema.

method sqlalchemy.engine.Dialect.has_index(connection: Connection, table_name: str, index_name: str, schema: str | None = None, **kw: Any) bool

检查数据库中是否存在特定索引名称。

给定一个Connection 对象,一个字符串 table_name 和一个字符串索引名称,如果在给定表上存在给定名称的索引,则返回 True,否则返回 False

DefaultDialect 通过 Dialect.has_table()Dialect.get_indexes() 方法来实现此方法,但是方言可以实现更高效的版本。

这是一个内部方言方法。应用程序应使用 Inspector.has_index()

版本 1.4 中的新功能。

method sqlalchemy.engine.Dialect.has_schema(connection: Connection, schema_name: str, **kw: Any) bool

检查数据库中是否存在特定模式名称。

给定一个Connection 对象,一个字符串 schema_name,如果存在给定模式,则返回 True,否则返回 False

DefaultDialect 通过检查 Dialect.get_schema_names() 返回的模式中是否存在 schema_name 来实现这一点,但是方言可以实现更高效的版本。

这是一个内部方言方法。应用程序应使用 Inspector.has_schema()

版本 2.0 中新增。

method sqlalchemy.engine.Dialect.has_sequence(connection: Connection, sequence_name: str, schema: str | None = None, **kw: Any) bool

检查数据库中是否存在特定序列。

给定一个Connection 对象和一个字符串 sequence_name,如果给定序列存在于数据库中,则返回 True,否则返回 False

这是一个内部方言方法。应用程序应使用 Inspector.has_sequence()

方法 sqlalchemy.engine.Dialect.has_table(connection: Connection, table_name: str, schema: str | None = None, **kw: Any) bool

用于内部方言,检查数据库中是否存在特定表或视图。

给定一个Connection 对象,一个字符串 table_name 和可选的模式名称,如果给定表存在于数据库中,则返回 True,否则返回 False。

此方法充当面向公众的 Inspector.has_table() 方法的底层实现,并且还用于在内部实现 Table.create()MetaData.create_all() 等方法的“checkfirst”行为。

注意

此方法在 SQLAlchemy 内部使用,并且发布是为了让第三方方言提供实现。它不是用于检查表是否存在的面向公众的 API。请使用 Inspector.has_table() 方法。

版本 2.0 中的更改::: Dialect.has_table() 现在正式支持检查其他类似表的对象

  • 任何类型的视图(普通或物化的)

  • 任何类型的临时表

以前,这两个检查没有正式指定,不同的方言在行为上会有所不同。方言测试套件现在包含针对所有这些对象类型的测试,并且方言(在支持数据库支持视图或临时表的程度上)应努力支持找到这些对象以实现完全合规性。

属性 sqlalchemy.engine.Dialect.has_terminate: bool

此方言是否具有不阻塞或不需要等待的单独“终止”实现。

属性 sqlalchemy.engine.Dialect.identifier_preparer: IdentifierPreparer

此元素将引用 IdentifierPreparer 的一个实例,一旦 DefaultDialect 被构造。

类方法 sqlalchemy.engine.Dialect.import_dbapi() module

导入此方言使用的 DBAPI 模块。

此处返回的 Python 模块对象将作为实例变量分配给构造的方言,名称为 .dbapi

在版本 2.0 中更改: The Dialect.import_dbapi() 类方法重命名自以前的方法 .Dialect.dbapi(),该方法将在方言实例化时被 DBAPI 模块本身替换,从而以两种不同的方式使用相同的名称。如果第三方方言上存在 .Dialect.dbapi() 类方法,它将被使用,并且会发出弃用警告。

属性 sqlalchemy.engine.Dialect.include_set_input_sizes: Set[Any] | None

应包含在自动 cursor.setinputsizes() 调用中的 DBAPI 类型对象的集合。

这仅在 bind_typing 为 BindTyping.SET_INPUT_SIZES 时使用

方法 sqlalchemy.engine.Dialect.initialize(connection: Connection) None

在使用连接策略化创建方言时调用。

允许方言根据服务器版本信息或其他属性配置选项。

此处传递的连接是 SQLAlchemy Connection 对象,具有完整功能。

基本方言的 initialize() 方法应通过 super() 调用。

注意

从 SQLAlchemy 1.4 开始,此方法在任何 Dialect.on_connect() 钩子被调用之前调用。

属性 sqlalchemy.engine.Dialect.inline_comments: bool

指示方言支持与表或列定义内联的注释 DDL。如果为 False,这意味着必须使用 ALTER 来设置表和列注释。

属性 sqlalchemy.engine.Dialect.insert_executemany_returning: bool

方言/驱动程序/数据库支持某些方法,在使用 dialect.do_executemany() 时提供 INSERT…RETURNING 支持。

属性 sqlalchemy.engine.Dialect.insert_executemany_returning_sort_by_parameter_order: bool

方言/驱动程序/数据库支持某些方法,在使用 dialect.do_executemany() 时,与 Insert.returning.sort_by_parameter_order 参数设置一起,提供 INSERT…RETURNING 支持。

属性 sqlalchemy.engine.Dialect.insert_returning: bool

如果方言支持 INSERT 的 RETURNING。

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.insertmanyvalues_implicit_sentinel: InsertmanyvaluesSentinelOpts

选项指示数据库支持某种形式的批量 INSERT,其中自动增量整数主键可以用作 INSERT 行的可靠排序。

版本 2.0.10 中的新增功能。

属性 sqlalchemy.engine.Dialect.insertmanyvalues_max_parameters: int

insertmanyvalues_page_size 的替代方法,将根据语句中的参数总数额外限制页面大小。

属性 sqlalchemy.engine.Dialect.insertmanyvalues_page_size: int

对于 ExecuteStyle.INSERTMANYVALUES 执行,将呈现到单个 INSERT..VALUES() 语句中的行数。

默认方言将此值默认为 1000。

版本 2.0 中新增。

另请参见

Connection.execution_options.insertmanyvalues_page_size - 在 Connection 上可用的执行选项,语句

属性 sqlalchemy.engine.Dialect.is_async: bool

此方言是否适用于 asyncio。

方法 sqlalchemy.engine.Dialect.is_disconnect(e: Exception, connection: PoolProxiedConnection | DBAPIConnection | None, cursor: DBAPICursor | None) bool

如果给定的 DB-API 错误指示连接无效,则返回 True。

属性 sqlalchemy.engine.Dialect.label_length: int | None

可选的由用户定义的 SQL 标签最大长度。

类方法 sqlalchemy.engine.Dialect.load_provisioning() None

为该方言设置 provision.py 模块。

对于包含 provision.py 模块以设置配置跟随者的方言,此方法应该启动该过程。

典型的实现方式如下

@classmethod
def load_provisioning(cls):
    __import__("mydialect.provision")

默认方法假设在当前方言所属包内的名为provision.py的模块,该模块基于__module__属性

@classmethod
def load_provisioning(cls):
    package = ".".join(cls.__module__.split(".")[0:-1])
    try:
        __import__(package + ".provision")
    except ImportError:
        pass

版本 1.3.14 中的新增功能。

属性 sqlalchemy.engine.Dialect.loaded_dbapi

与 .dbapi 相同,但永远不会是 None;如果未设置 DBAPI,则会引发错误。

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.max_identifier_length: int

标识符名称的最大长度。

属性 sqlalchemy.engine.Dialect.name: str

从 DBAPI 中立的角度(即 'sqlite')识别方言的名称。

方法 sqlalchemy.engine.Dialect.normalize_name(name: str) str

如果检测到不区分大小写,则将给定名称转换为小写。

此方法仅在方言定义 requires_name_normalize=True 时使用。

方法 sqlalchemy.engine.Dialect.on_connect() Callable[[Any], Any] | None

返回一个可调用函数,该函数设置新创建的 DBAPI 连接。

该可调用函数应该接受一个名为“conn”的参数,该参数是 DBAPI 连接本身。内部可调用函数没有返回值。

例如

class MyDialect(default.DefaultDialect):
    # ...

    def on_connect(self):
        def do_on_connect(connection):
            connection.execute("SET SPECIAL FLAGS etc")

        return do_on_connect

这用于设置方言范围内的每个连接选项,例如隔离模式、Unicode 模式等。

使用PoolEvents.connect()事件钩子调用“do_on_connect”可调用函数,然后解包 DBAPI 连接并将它传递到可调用函数中。

版本 1.4 中的更改: 对于方言的第一个连接,on_connect 钩子不再调用两次。但是,on_connect 钩子仍然在Dialect.initialize()方法之前调用。

版本 1.4.3 中的更改: on_connect 钩子是从一个名为 on_connect_url 的新方法中调用的,该方法传递了用于创建连接参数的 URL。如果方言需要用于连接的 URL 对象以获取更多上下文,则方言可以实现 on_connect_url 而不是 on_connect。

如果返回 None,则不会生成任何事件监听器。

返回值:

接受单个 DBAPI 连接作为参数的可调用函数,或 None。

另请参见

Dialect.connect() - 允许控制 DBAPI connect() 序列本身。

Dialect.on_connect_url() - 取代Dialect.on_connect()以接收上下文中的URL对象。

方法 sqlalchemy.engine.Dialect.on_connect_url(url: URL) Callable[[Any], Any] | None

返回一个可调用函数,该函数设置新创建的 DBAPI 连接。

当由方言实现时,此方法是一个取代Dialect.on_connect()方法的新钩子。当没有由方言实现时,它直接调用Dialect.on_connect()方法,以保持与现有方言的兼容性。预计不会弃用Dialect.on_connect()

该可调用函数应该接受一个名为“conn”的参数,该参数是 DBAPI 连接本身。内部可调用函数没有返回值。

例如

class MyDialect(default.DefaultDialect):
    # ...

    def on_connect_url(self, url):
        def do_on_connect(connection):
            connection.execute("SET SPECIAL FLAGS etc")

        return do_on_connect

这用于设置方言范围内的每个连接选项,例如隔离模式、Unicode 模式等。

此方法与Dialect.on_connect()的区别在于,它传递了与连接参数相关的URL对象。通常,从Dialect.on_connect()钩子获取此对象的唯一方法是在Engine本身查找,但是此 URL 对象可能已被插件替换。

注意

Dialect.on_connect_url()的默认实现是调用Dialect.on_connect()方法。因此,如果方言实现了此方法,则除非覆盖方言从这里直接调用它,否则Dialect.on_connect()方法不会被调用

版本 1.4.3 中的新增功能: 添加了Dialect.on_connect_url(),它通常调用Dialect.on_connect()

参数:

url – 一个 URL 对象,表示传递给 Dialect.create_connect_args() 方法的 URL

返回值:

接受单个 DBAPI 连接作为参数的可调用函数,或 None。

另请参见

Dialect.on_connect()

attribute sqlalchemy.engine.Dialect.paramstyle: str

要使用的参数样式(某些 DB-API 支持多个参数样式)。

attribute sqlalchemy.engine.Dialect.positional: bool

如果此 Dialect 的参数样式是位置样式,则为 True。

attribute sqlalchemy.engine.Dialect.preexecute_autoincrement_sequences: bool

如果“隐式”主键函数必须单独执行才能获取其值,则为 True,前提是未使用 RETURNING。

这目前针对 PostgreSQL 而言,当implicit_returning=False参数在Table对象上使用时。

attribute sqlalchemy.engine.Dialect.preparer: Type[IdentifierPreparer]

一个 IdentifierPreparer 类,用于引用标识符。

attribute sqlalchemy.engine.Dialect.reflection_options: Sequence[str] = ()

表示字符串名称的序列,这些名称指示可以在 Table 对象上建立的关键字参数,这些参数将在使用 Table.autoload_with 时作为“反射选项”传递。

当前示例是 Oracle 方言中的“oracle_resolve_synonyms”。

method sqlalchemy.engine.Dialect.reset_isolation_level(dbapi_connection: DBAPIConnection) None

给定一个 DBAPI 连接,将其隔离级别恢复为默认值。

请注意,这是一个方言级别的方法,用作 ConnectionEngine 隔离级别功能实现的一部分;对于大多数典型用例,应优先使用这些 API。

另请参见

Connection.get_isolation_level() - 查看当前级别

Connection.default_isolation_level - 查看默认级别

Connection.execution_options.isolation_level - 设置每个 Connection 隔离级别

create_engine.isolation_level - 设置每个 Engine 隔离级别

attribute sqlalchemy.engine.Dialect.returns_native_bytes: bool

指示驱动程序是否为 SQL“二进制”数据类型以原生方式返回 Python bytes() 对象。

2.0.11 版中的新增内容。

attribute sqlalchemy.engine.Dialect.sequences_optional: bool

如果为 True,则表示 Sequence.optional 参数在 Sequence 结构中应指示不生成 CREATE SEQUENCE。仅适用于支持序列的方言。目前仅用于允许 PostgreSQL SERIAL 用于在指定 Sequence() 的列上,以便在其他后端使用。

attribute sqlalchemy.engine.Dialect.server_side_cursors: bool

已弃用;指示方言是否应该尝试默认使用服务器端游标

attribute sqlalchemy.engine.Dialect.server_version_info: Tuple[Any, ...] | None

包含正在使用的 DB 后端版本号的元组。

此值仅适用于支持的方言,通常在与数据库的初始连接期间填充。

method sqlalchemy.engine.Dialect.set_connection_execution_options(connection: Connection, opts: CoreExecuteOptionsParameter) None

为给定连接建立执行选项。

这是由 DefaultDialect 实现的,以便实现 Connection.execution_options.isolation_level 执行选项。方言可以拦截各种执行选项,这些选项可能需要修改特定 DBAPI 连接上的状态。

版本 1.4 中的新功能。

method sqlalchemy.engine.Dialect.set_engine_execution_options(engine: Engine, opts: CoreExecuteOptionsParameter) None

为给定引擎建立执行选项。

这是由 DefaultDialect 实现的,以便为给定 Engine 创建的新的 Connection 实例建立事件钩子,然后将调用该连接的 Dialect.set_connection_execution_options() 方法。

method sqlalchemy.engine.Dialect.set_isolation_level(dbapi_connection: DBAPIConnection, level: Literal['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED', 'READ UNCOMMITTED', 'AUTOCOMMIT']) None

给定一个 DBAPI 连接,设置其隔离级别。

请注意,这是一个方言级别的方法,用作 ConnectionEngine 隔离级别功能实现的一部分;对于大多数典型用例,应优先使用这些 API。

如果方言还实现了 Dialect.get_isolation_level_values() 方法,那么给定的级别保证是该序列中字符串名称之一,并且该方法将不需要预期查找失败。

另请参见

Connection.get_isolation_level() - 查看当前级别

Connection.default_isolation_level - 查看默认级别

Connection.execution_options.isolation_level - 设置每个 Connection 隔离级别

create_engine.isolation_level - 设置每个 Engine 隔离级别

attribute sqlalchemy.engine.Dialect.statement_compiler: Type[SQLCompiler]

一个 Compiled 类,用于编译 SQL 语句

attribute sqlalchemy.engine.Dialect.supports_alter: bool

如果数据库支持 ALTER TABLE 则为 True - 仅用于在某些情况下生成外键约束

attribute sqlalchemy.engine.Dialect.supports_comments: bool

指示方言支持表和列上的注释 DDL。

attribute sqlalchemy.engine.Dialect.supports_constraint_comments: bool

指示方言是否支持约束上的注释 DDL。

attribute sqlalchemy.engine.Dialect.supports_default_metavalue: bool

方言支持 INSERT…(col) VALUES (DEFAULT) 语法。

大多数数据库以某种方式支持它,例如 SQLite 使用 VALUES (NULL) 支持它。MS SQL Server 也支持该语法,但是它是我们唯一禁用的包含的方言,因为 MSSQL 不支持 IDENTITY 列的字段,而该字段通常是我们想要使用该功能的地方。

attribute sqlalchemy.engine.Dialect.supports_default_values: bool

方言支持 INSERT… DEFAULT VALUES 语法

attribute sqlalchemy.engine.Dialect.supports_empty_insert: bool

方言支持 INSERT () VALUES (),即没有列的普通 INSERT。

这通常不受支持;“空”插入通常使用“INSERT..DEFAULT VALUES”或“INSERT … (col) VALUES (DEFAULT)”来实现。

attribute sqlalchemy.engine.Dialect.supports_identity_columns: bool

目标数据库支持 IDENTITY

属性 sqlalchemy.engine.Dialect.supports_multivalues_insert: bool

目标数据库支持带有多个值集的 INSERT…VALUES,例如 INSERT INTO table (cols) VALUES (…), (…), (…), …

属性 sqlalchemy.engine.Dialect.supports_native_boolean: bool

指示方言是否支持原生布尔结构。这将阻止 Boolean 在使用该类型时生成 CHECK 约束。

属性 sqlalchemy.engine.Dialect.supports_native_decimal: bool

指示是否为精确数值类型处理和返回 Decimal 对象,或者是否返回浮点数。

属性 sqlalchemy.engine.Dialect.supports_native_enum: bool

指示方言是否支持原生 ENUM 结构。这将阻止 Enum 在以“原生”模式使用该类型时生成 CHECK 约束。

属性 sqlalchemy.engine.Dialect.supports_native_uuid: bool

指示驱动程序是否为 SQL UUID 数据类型原生处理 Python UUID() 对象。

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.supports_sane_multi_rowcount: bool

指示方言是否在通过 executemany 执行 UPDATEDELETE 语句时正确实现 rowcount。

属性 sqlalchemy.engine.Dialect.supports_sane_rowcount: bool

指示方言是否正确实现 UPDATEDELETE 语句的 rowcount。

属性 sqlalchemy.engine.Dialect.supports_sequences: bool

指示方言是否支持 CREATE SEQUENCE 或类似的命令。

属性 sqlalchemy.engine.Dialect.supports_server_side_cursors: bool

指示方言是否支持服务器端游标

属性 sqlalchemy.engine.Dialect.supports_simple_order_by_label: bool

目标数据库支持 ORDER BY <labelname>,其中 <labelname> 指的是 SELECT 语句的 columns 子句中的标签

属性 sqlalchemy.engine.Dialect.supports_statement_cache: bool = True

指示此方言是否支持缓存。

所有与语句缓存兼容的方言都应该直接在每个支持缓存的方言类及其子类上将此标志设置为 True。SQLAlchemy 会在使用语句缓存之前测试此标志是否在每个方言子类上本地存在。这是为了为尚未完全测试以符合 SQL 语句缓存的旧有方言或新方言提供安全性。

版本 1.4.5 中的新增功能。

属性 sqlalchemy.engine.Dialect.tuple_in_values: bool

目标数据库支持元组 IN,例如 (x, y) IN ((q, p), (r, z))

属性 sqlalchemy.engine.Dialect.type_compiler: Any

遗留;这是类级别的 TypeCompiler 类,实例级别的 TypeCompiler 实例。

请参阅 type_compiler_instance 代替。

属性 sqlalchemy.engine.Dialect.type_compiler_cls: ClassVar[Type[TypeCompiler]]

用于编译 SQL 类型对象的 Compiled

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.type_compiler_instance: TypeCompiler

Compiled 类的实例,用于编译 SQL 类型对象

版本 2.0 中新增。

方法 sqlalchemy.engine.Dialect.type_descriptor(typeobj: TypeEngine[_T]) TypeEngine[_T]

将通用类型转换为特定于方言的类型。

方言类通常会使用 adapt_type() 函数在类型模块中实现这一点。

返回的结果被每个方言类缓存,因此不能包含方言实例状态。

属性 sqlalchemy.engine.Dialect.update_executemany_returning: bool

方言支持 UPDATE..RETURNING 与 executemany 一起使用。

属性 sqlalchemy.engine.Dialect.update_returning: bool

如果方言支持 UPDATE 时的 RETURNING

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.update_returning_multifrom: bool

如果方言支持 UPDATE..FROM 时的 RETURNING

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.use_insertmanyvalues: bool

如果为 True,则表示应使用“insertmanyvalues”功能来允许 insert_executemany_returning 行为,如果可能。

实际上,将此设置为 True 意味着

如果 supports_multivalues_insertinsert_returninguse_insertmanyvalues 都为 True,SQL 编译器将生成一个 INSERT,它将被 DefaultDialect 解释为 ExecuteStyle.INSERTMANYVALUES 执行,它允许使用 RETURNING 插入多行,通过将单行 INSERT 语句重写为具有多个 VALUES 子句,并且在给定大量行时,对一系列批次执行多次语句。

该参数对于默认方言为 False,对于 SQLAlchemy 内部方言 SQLite、MySQL/MariaDB、PostgreSQL、SQL Server 则设置为 True。对于 Oracle,它仍然为 False,Oracle 提供了本机的“使用 RETURNING 的 executemany”支持,并且也不支持 supports_multivalues_insert。对于 MySQL/MariaDB,不支持 RETURNING 的那些 MySQL 方言不会将 insert_executemany_returning 报告为 True。

版本 2.0 中新增。

属性 sqlalchemy.engine.Dialect.use_insertmanyvalues_wo_returning: bool

如果为 True,并且 use_insertmanyvalues 也为 True,不包含 RETURNING 的 INSERT 语句也将使用“insertmanyvalues”。

版本 2.0 中新增。

sqlalchemy.engine.default.DefaultExecutionContext
attribute sqlalchemy.engine.default.DefaultExecutionContext.compiled: Compiled | None = None

如果传递给构造函数,则为正在执行的 sqlalchemy.engine.base.Compiled 对象。

attribute sqlalchemy.engine.default.DefaultExecutionContext.connection: Connection

Connection 对象,默认值生成器可以自由使用它来执行 SQL。 此 Connection 应引用与 root_connection 相同的基础连接/事务资源。

method sqlalchemy.engine.default.DefaultExecutionContext.create_cursor()

返回从此 ExecutionContext 的连接生成的新的游标。

某些方言可能希望更改 connection.cursor() 的行为,例如 postgresql 可能会返回 PG “服务器端” 游标。

attribute sqlalchemy.engine.default.DefaultExecutionContext.current_parameters: _CoreSingleExecuteParams | None = None

应用于当前行的参数字典。

此属性仅在用户定义的默认生成函数的上下文中可用,例如,如 上下文敏感默认函数 中所述。 它包含一个字典,其中包含将成为 INSERT 或 UPDATE 语句一部分的每个列/值对的条目。 字典的键将是每个 Column 的键值,通常等同于名称。

请注意,DefaultExecutionContext.current_parameters 属性不能适应 Insert.values() 方法的“多值”功能。 应该首选 DefaultExecutionContext.get_current_parameters() 方法。

attribute sqlalchemy.engine.default.DefaultExecutionContext.cursor: DBAPICursor

从连接获取的 DB-API 游标

attribute sqlalchemy.engine.default.DefaultExecutionContext.dialect: Dialect

创建此 ExecutionContext 的方言。

attribute sqlalchemy.engine.default.DefaultExecutionContext.engine: Engine

Connection 关联的引擎

attribute sqlalchemy.engine.default.DefaultExecutionContext.execute_style: ExecuteStyle = 0

将用于执行语句的 DBAPI 游标方法的样式。

版本 2.0 中新增。

attribute sqlalchemy.engine.default.DefaultExecutionContext.executemany: bool

如果上下文具有多个参数集,则为 True。

历史上,此属性链接到是否使用 cursor.execute()cursor.executemany()。 它现在也可能意味着将使用“insertmanyvalues”,它指示一个或多个 cursor.execute() 调用。

attribute sqlalchemy.engine.default.DefaultExecutionContext.execution_options: _ExecuteOptions = {}

与当前语句执行相关的执行选项

方法 sqlalchemy.engine.default.DefaultExecutionContext.fetchall_for_returning(cursor)

对于 RETURNING 结果,从 DBAPI 游标中获取 cursor.fetchall()。

这是一个特定于方言的钩子,用于那些在调用 “RETURNING” 语句返回的行时有特殊考虑的方言。默认实现为 cursor.fetchall()

此钩子目前仅由 insertmanyvalues 功能使用。没有设置 use_insertmanyvalues=True 的方言不需要考虑此钩子。

版本 2.0.10 中的新增功能。

方法 sqlalchemy.engine.default.DefaultExecutionContext.get_current_parameters(isolate_multiinsert_groups=True)

返回应用于当前行的参数字典。

此方法只能在用户定义的默认生成函数的上下文中使用,例如在 上下文敏感的默认函数 中所述。当调用时,将返回一个字典,其中包含 INSERT 或 UPDATE 语句中包含的每个列/值对的条目。字典的键将是每个 Column 的键值,通常与名称相同。

参数:

isolate_multiinsert_groups=True – 指示使用 Insert.values() 创建的多值 INSERT 结构应通过仅返回当前列默认调用局部参数的子集来处理。当为 False 时,将返回语句的原始参数,包括在多值 INSERT 情况下使用的命名约定。

新版功能 1.2: 添加了 DefaultExecutionContext.get_current_parameters(),它提供了比现有 DefaultExecutionContext.current_parameters 属性更多的功能。

方法 sqlalchemy.engine.default.DefaultExecutionContext.get_lastrowid()

在 INSERT 后返回 self.cursor.lastrowid 或等效项。

这可能涉及调用特殊的游标函数,在游标(或新的游标)上发出新的 SELECT,或返回在 post_exec() 中计算的存储值。

此函数仅针对支持 “隐式” 主键生成的方言调用,将 preexecute_autoincrement_sequences 设置为 False,以及当没有显式 ID 值绑定到语句时调用。

该函数对于需要为那些使用 lastrowid 概念的方言返回最后插入的主键的 INSERT 语句调用一次。在这种情况下,它在 ExecutionContext.post_exec() 之后直接调用。

方法 sqlalchemy.engine.default.DefaultExecutionContext.get_out_parameter_values(names)

从游标返回一系列 OUT 参数值。

对于支持 OUT 参数的方言,当存在一个 SQLCompiler 对象,该对象设置了 SQLCompiler.has_out_parameters 标志时,将调用此方法。反过来,如果语句本身具有 BindParameter 对象,这些对象具有由 SQLCompiler.visit_bindparam() 方法消耗的 .isoutparam 标志,则将设置此标志。如果方言编译器生成 BindParameter 对象,这些对象具有未由 SQLCompiler.visit_bindparam() 处理的 .isoutparam,则应显式设置此标志。

将传递每个绑定参数的渲染名称列表到该方法。然后,该方法应返回与参数对象列表相对应的一系列值。与之前的 SQLAlchemy 版本不同,这些值可以是 DBAPI 中的原始值;执行上下文将根据 self.compiled.binds 中存在的类型处理程序应用适当的类型处理程序,并更新这些值。然后,处理后的字典将通过结果对象上的 .out_parameters 集合提供。请注意,SQLAlchemy 1.4 作为 2.0 过渡的一部分具有多种类型的结果对象。

新版功能 1.4: - 添加了 ExecutionContext.get_out_parameter_values(),当存在具有 .isoutparam 标志的 BindParameter 对象时,它会由 DefaultExecutionContext 自动调用。这取代了在现在已删除的 get_result_proxy() 方法中设置输出参数的做法。

方法 sqlalchemy.engine.default.DefaultExecutionContext.get_result_processor(type_, colname, coltype)

返回存在于 cursor.description 中的给定类型的“结果处理程序”。

它有一个默认实现,方言可以覆盖以进行上下文敏感的结果类型处理。

方法 sqlalchemy.engine.default.DefaultExecutionContext.handle_dbapi_exception(e)

接收在执行、结果获取等操作时发生的 DBAPI 异常。

属性 sqlalchemy.engine.default.DefaultExecutionContext.invoked_statement: Executable | None = None

最初提供的 Executable 语句对象。

这应该在结构上等效于 compiled.statement,但不一定与缓存方案中的同一个对象相同,因为编译后的形式将从缓存中提取。

属性 sqlalchemy.engine.default.DefaultExecutionContext.isinsert: bool = False

如果语句是 INSERT,则为 True。

属性 sqlalchemy.engine.default.DefaultExecutionContext.isupdate: bool = False

如果语句是 UPDATE,则为 True。

方法 sqlalchemy.engine.default.DefaultExecutionContext.lastrow_has_defaults()

如果最后一个 INSERT 或 UPDATE 行包含内联或数据库端默认值,则返回 True。

属性 sqlalchemy.engine.default.DefaultExecutionContext.no_parameters: bool

如果执行风格不使用参数,则为 True

attribute sqlalchemy.engine.default.DefaultExecutionContext.parameters: _DBAPIMultiExecuteParams

传递给 execute() 或 exec_driver_sql() 方法的绑定参数。

这些参数始终存储为参数条目列表。单个元素列表对应于 cursor.execute() 调用,多个元素列表对应于 cursor.executemany(),除了 ExecuteStyle.INSERTMANYVALUES 的情况,它将使用 cursor.execute() 一次或多次。

method sqlalchemy.engine.default.DefaultExecutionContext.post_exec()

在执行编译后的语句后调用。

如果编译后的语句传递给此 ExecutionContext,则 last_insert_idslast_inserted_params 等数据成员应在此方法完成后可用。

attribute sqlalchemy.engine.default.DefaultExecutionContext.postfetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

已触发服务器端默认值或内联 SQL 表达式值的 Column 对象列表。适用于插入和更新。

method sqlalchemy.engine.default.DefaultExecutionContext.pre_exec()

在执行编译后的语句之前调用。

如果编译后的语句传递给此 ExecutionContext,则 statementparameters 数据成员必须在此语句完成后初始化。

attribute sqlalchemy.engine.default.DefaultExecutionContext.prefetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

已触发客户端端默认值的 Column 对象列表。适用于插入和更新。

attribute sqlalchemy.engine.default.DefaultExecutionContext.root_connection: Connection

此 ExecutionContext 的来源的 Connection 对象。

class sqlalchemy.engine.ExecutionContext

与单个执行相对应的 Dialect 的消息传递对象。

attribute sqlalchemy.engine.ExecutionContext.compiled: Compiled | None

如果传递给构造函数,则为正在执行的 sqlalchemy.engine.base.Compiled 对象。

attribute sqlalchemy.engine.ExecutionContext.connection: Connection

Connection 对象,默认值生成器可以自由使用它来执行 SQL。 此 Connection 应引用与 root_connection 相同的基础连接/事务资源。

method sqlalchemy.engine.ExecutionContext.create_cursor() DBAPICursor

返回从此 ExecutionContext 的连接生成的新的游标。

某些方言可能希望更改 connection.cursor() 的行为,例如 postgresql 可能会返回 PG “服务器端” 游标。

attribute sqlalchemy.engine.ExecutionContext.cursor: DBAPICursor

从连接获取的 DB-API 游标

attribute sqlalchemy.engine.ExecutionContext.dialect: Dialect

创建此 ExecutionContext 的方言。

attribute sqlalchemy.engine.ExecutionContext.engine: Engine

Connection 关联的引擎

attribute sqlalchemy.engine.ExecutionContext.execute_style: ExecuteStyle

将用于执行语句的 DBAPI 游标方法的样式。

版本 2.0 中新增。

attribute sqlalchemy.engine.ExecutionContext.executemany: bool

如果上下文具有多个参数集,则为 True。

历史上,此属性链接到是否使用 cursor.execute()cursor.executemany()。 它现在也可能意味着将使用“insertmanyvalues”,它指示一个或多个 cursor.execute() 调用。

attribute sqlalchemy.engine.ExecutionContext.execution_options: _ExecuteOptions

与当前语句执行相关的执行选项

method sqlalchemy.engine.ExecutionContext.fetchall_for_returning(cursor: DBAPICursor) Sequence[Any]

对于 RETURNING 结果,从 DBAPI 游标中获取 cursor.fetchall()。

这是一个特定于方言的钩子,用于那些在调用 “RETURNING” 语句返回的行时有特殊考虑的方言。默认实现为 cursor.fetchall()

此钩子目前仅由 insertmanyvalues 功能使用。没有设置 use_insertmanyvalues=True 的方言不需要考虑此钩子。

版本 2.0.10 中的新增功能。

method sqlalchemy.engine.ExecutionContext.fire_sequence(seq: Sequence_SchemaItem, type_: Integer) int

给定一个 Sequence,调用它并返回下一个整数。

method sqlalchemy.engine.ExecutionContext.get_out_parameter_values(out_param_names: Sequence[str]) Sequence[Any]

从游标返回一系列 OUT 参数值。

对于支持 OUT 参数的方言,当存在一个 SQLCompiler 对象,该对象设置了 SQLCompiler.has_out_parameters 标志时,将调用此方法。反过来,如果语句本身具有 BindParameter 对象,这些对象具有由 SQLCompiler.visit_bindparam() 方法消耗的 .isoutparam 标志,则将设置此标志。如果方言编译器生成 BindParameter 对象,这些对象具有未由 SQLCompiler.visit_bindparam() 处理的 .isoutparam,则应显式设置此标志。

将传递每个绑定参数的渲染名称列表到该方法。然后,该方法应返回与参数对象列表相对应的一系列值。与之前的 SQLAlchemy 版本不同,这些值可以是 DBAPI 中的原始值;执行上下文将根据 self.compiled.binds 中存在的类型处理程序应用适当的类型处理程序,并更新这些值。然后,处理后的字典将通过结果对象上的 .out_parameters 集合提供。请注意,SQLAlchemy 1.4 作为 2.0 过渡的一部分具有多种类型的结果对象。

新版功能 1.4: - 添加了 ExecutionContext.get_out_parameter_values(),当存在具有 .isoutparam 标志的 BindParameter 对象时,它会由 DefaultExecutionContext 自动调用。这取代了在现在已删除的 get_result_proxy() 方法中设置输出参数的做法。

method sqlalchemy.engine.ExecutionContext.get_rowcount() int | None

返回 DBAPI cursor.rowcount 值,或在某些情况下为解释后的值。

有关此的详细信息,请参阅 CursorResult.rowcount

method sqlalchemy.engine.ExecutionContext.handle_dbapi_exception(e: BaseException) None

接收在执行、结果获取等操作时发生的 DBAPI 异常。

attribute sqlalchemy.engine.ExecutionContext.invoked_statement: Executable | None

最初提供的 Executable 语句对象。

这应该在结构上等效于 compiled.statement,但不一定与缓存方案中的同一个对象相同,因为编译后的形式将从缓存中提取。

attribute sqlalchemy.engine.ExecutionContext.isinsert: bool

如果语句是 INSERT,则为 True。

attribute sqlalchemy.engine.ExecutionContext.isupdate: bool

如果语句是 UPDATE,则为 True。

method sqlalchemy.engine.ExecutionContext.lastrow_has_defaults() bool

如果最后一个 INSERT 或 UPDATE 行包含内联或数据库端默认值,则返回 True。

attribute sqlalchemy.engine.ExecutionContext.no_parameters: bool

如果执行风格不使用参数,则为 True

attribute sqlalchemy.engine.ExecutionContext.parameters: _AnyMultiExecuteParams

传递给 execute() 或 exec_driver_sql() 方法的绑定参数。

这些参数始终存储为参数条目列表。单个元素列表对应于 cursor.execute() 调用,多个元素列表对应于 cursor.executemany(),除了 ExecuteStyle.INSERTMANYVALUES 的情况,它将使用 cursor.execute() 一次或多次。

method sqlalchemy.engine.ExecutionContext.post_exec() None

在执行编译后的语句后调用。

如果编译后的语句传递给此 ExecutionContext,则 last_insert_idslast_inserted_params 等数据成员应在此方法完成后可用。

attribute sqlalchemy.engine.ExecutionContext.postfetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

已触发服务器端默认值或内联 SQL 表达式值的 Column 对象列表。适用于插入和更新。

method sqlalchemy.engine.ExecutionContext.pre_exec() None

在执行编译后的语句之前调用。

如果编译后的语句传递给此 ExecutionContext,则 statementparameters 数据成员必须在此语句完成后初始化。

attribute sqlalchemy.engine.ExecutionContext.prefetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

已触发客户端端默认值的 Column 对象列表。适用于插入和更新。

attribute sqlalchemy.engine.ExecutionContext.root_connection: Connection

此 ExecutionContext 的来源的 Connection 对象。

attribute sqlalchemy.engine.ExecutionContext.statement: str

要执行的语句的字符串版本。传递给构造函数,或在 pre_exec() 完成后必须从 sql.Compiled 对象创建。

class sqlalchemy.sql.compiler.ExpandedState

表示在生成语句的“扩展”和“编译后”绑定参数时使用的状态。

“扩展”参数是在语句执行时生成的,以适应传递的一系列参数,最突出的例子是 IN 表达式中的各个元素。

“编译后”参数是在执行时将 SQL 字面值渲染到 SQL 语句中的参数,而不是作为单独的参数传递给驱动程序。

要创建 ExpandedState 实例,请使用 SQLCompiler.construct_expanded_state() 方法,该方法适用于任何 SQLCompiler 实例。

类签名

class sqlalchemy.sql.compiler.ExpandedState (builtins.tuple)

attribute sqlalchemy.sql.compiler.ExpandedState.additional_parameters

ExpandedState.parameters 的同义词。

attribute sqlalchemy.sql.compiler.ExpandedState.parameter_expansion: Mapping[str, List[str]]

映射表示原始参数名称到“扩展”参数名称列表的中间链接,对于已扩展的参数。

attribute sqlalchemy.sql.compiler.ExpandedState.parameters: _CoreSingleExecuteParams

参数字典,其中参数已完全扩展。

对于使用命名参数的语句,此字典将完全映射到语句中的名称。对于使用位置参数的语句,ExpandedState.positional_parameters 将产生包含位置参数集的元组。

attribute sqlalchemy.sql.compiler.ExpandedState.positional_parameters

位置参数的元组,用于使用位置参数样式编译的语句。

attribute sqlalchemy.sql.compiler.ExpandedState.positiontup: Sequence[str] | None

指示位置参数顺序的字符串名称序列

attribute sqlalchemy.sql.compiler.ExpandedState.processors: Mapping[str, _BindProcessorType[Any]]

绑定值处理器的映射

attribute sqlalchemy.sql.compiler.ExpandedState.statement: str

带有完全扩展参数的字符串 SQL 语句

class sqlalchemy.sql.compiler.GenericTypeCompiler

成员

ensure_kwarg

类签名

class sqlalchemy.sql.compiler.GenericTypeCompiler (sqlalchemy.sql.compiler.TypeCompiler)

attribute sqlalchemy.sql.compiler.GenericTypeCompiler.ensure_kwarg: str = 'visit_\\w+'

继承自 TypeCompiler.ensure_kwarg 属性 TypeCompiler

一个正则表达式,指示该方法应接受 **kw 参数的方法名称。

该类将扫描匹配名称模板的方法,并在必要时对其进行装饰,以确保接受 **kw 参数。

class sqlalchemy.log.Identified
class sqlalchemy.sql.compiler.IdentifierPreparer

根据选项处理标识符的引用和大小写折叠。

method sqlalchemy.sql.compiler.IdentifierPreparer.__init__(dialect, initial_quote='"', final_quote=None, escape_quote='"', quote_case_sensitive_collations=True, omit_schema=False)

构造一个新的 IdentifierPreparer 对象。

initial_quote

开始定界标识符的字符。

final_quote

结束定界标识符的字符。默认值为 initial_quote

omit_schema

防止在前面加上模式名称。适用于不支持模式的数据库。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.format_column(column, use_table=False, name=None, table_name=None, use_schema=False, anon_map=None)

准备一个带引号的列名。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.format_label_name(name, anon_map=None)

准备一个带引号的列名。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.format_schema(name)

准备一个带引号的模式名。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.format_table(table, use_schema=True, name=None)

准备一个带引号的表名和模式名。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.format_table_seq(table, use_schema=True)

格式化表名和模式为一个元组。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.quote(ident: str, force: Any | None = None) str

有条件地引用标识符。

如果标识符是保留字,包含需要引号的字符,或者是一个 quoted_name 的实例,其中包含 quote 设置为 True,则会引用标识符。

子类可以重写此方法,为标识符名称提供数据库相关的引用行为。

参数:
方法 sqlalchemy.sql.compiler.IdentifierPreparer.quote_identifier(value: str) str

引用标识符。

子类应该重写此方法,提供数据库相关的引用行为。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.quote_schema(schema: str, force: Any | None = None) str

有条件地引用模式名。

如果名称是保留字,包含需要引号的字符,或者是一个 quoted_name 的实例,其中包含 quote 设置为 True,则会引用名称。

子类可以重写此方法,为模式名提供数据库相关的引用行为。

参数:
属性 sqlalchemy.sql.compiler.IdentifierPreparer.schema_for_object: _SchemaForObjectCallable = operator.attrgetter('schema')

返回对象的 .schema 属性。

对于默认的 IdentifierPreparer,对象的模式始终是 “.schema” 属性的值。如果 preparer 被替换为一个具有非空 schema_translate_map 的 preparer,则 “.schema” 属性的值将被渲染为一个符号,该符号将在编译后从映射中转换为真正的模式名。

方法 sqlalchemy.sql.compiler.IdentifierPreparer.unformat_identifiers(identifiers)

将 ‘schema.table.column’ 形式的字符串解包为组件。

method sqlalchemy.sql.compiler.IdentifierPreparer.validate_sql_phrase(element, reg)

关键字序列过滤器。

用于表示关键字序列的元素的过滤器,例如“INITIALLY”、“INITIALLY DEFERRED”等。 不应包含特殊字符。

版本 1.3 中的新增功能。

class sqlalchemy.sql.compiler.SQLCompiler

Compiled 的默认实现。

ClauseElement 对象编译成 SQL 字符串。

method sqlalchemy.sql.compiler.SQLCompiler.__init__(dialect: Dialect, statement: ClauseElement | None, cache_key: CacheKey | None = None, column_keys: Sequence[str] | None = None, for_executemany: bool = False, linting: Linting = Linting.NO_LINTING, _supporting_against: SQLCompiler | None = None, **kwargs: Any)

构造一个新的 SQLCompiler 对象。

参数:
  • dialect – 要使用的 Dialect

  • statement – 要编译的 ClauseElement

  • column_keys – 要编译成 INSERT 或 UPDATE 语句的列名列表。

  • for_executemany – 是否 INSERT / UPDATE 语句应期望它们将在“executemany”样式中调用,这可能会影响语句将如何预期返回默认值和自动递增 / 序列以及类似内容的值。 根据使用的后端和驱动程序,获取这些值的支持可能会被禁用,这意味着 SQL 表达式可能在内联渲染,RETURNING 可能不会渲染等。

  • kwargs – 超类要使用的其他关键字参数。

attribute sqlalchemy.sql.compiler.SQLCompiler.ansi_bind_rules: bool = False

SQL 92 不允许在 SELECT 的列子句中使用绑定参数,也不允许使用像“? = ?”这样的歧义表达式。 如果目标驱动程序/数据库强制执行此操作,编译器子类可以将此标志设置为 False

attribute sqlalchemy.sql.compiler.SQLCompiler.bind_names: Dict[BindParameter[Any], str]

一个 BindParameter 实例到实际出现在生成的 SQL 中的“编译”名称的字典

attribute sqlalchemy.sql.compiler.SQLCompiler.bindname_escape_characters: ClassVar[Mapping[str, str]] = {' ': '_', '%': 'P', '(': 'A', ')': 'Z', '.': '_', ':': 'C', '[': '_', ']': '_'}

一个映射(例如字典或类似的),包含一个字符到替换字符的查找,这些字符将应用于 SQL 语句中使用的所有“绑定名称”,作为一种“转义”形式;当在 SQL 语句中呈现时,给定的字符将完全替换为“替换”字符,并且对传递给 Connection.execute() 等方法的参数字典中使用的传入名称执行类似的转换。

这允许在 bindparam() 和其他结构中使用的绑定参数名称包含任何任意字符,而无需担心目标数据库上完全不允许的字符。

第三方方言可以在此处建立自己的字典来替换默认映射,这将确保映射中的特定字符永远不会出现在绑定参数名称中。

该字典在**类创建时**进行评估,因此无法在运行时修改;它必须在类首次声明时存在于类中。

请注意,对于具有其他绑定参数规则(例如对前导字符的额外限制)的方言,SQLCompiler.bindparam_string() 方法可能需要进行扩展。请参阅 cx_Oracle 编译器以了解此示例。

版本 2.0.0rc1 中的新增功能。

attribute sqlalchemy.sql.compiler.SQLCompiler.binds: Dict[str, BindParameter[Any]]

一个绑定参数键到 BindParameter 实例的字典。

attribute sqlalchemy.sql.compiler.SQLCompiler.bindtemplate: str

根据 paramstyle 渲染绑定参数的模板。

attribute sqlalchemy.sql.compiler.SQLCompiler.compilation_bindtemplate: str

编译器在应用位置 paramstyle 之前用于渲染参数的模板

method sqlalchemy.sql.compiler.SQLCompiler.construct_expanded_state(params: _CoreSingleExecuteParams | None = None, escape_names: bool = True) ExpandedState

为给定的参数集返回一个新的 ExpandedState

对于使用“扩展”或其他延迟渲染参数的查询,此方法将提供最终的 SQL 字符串以及特定参数集将使用的参数。

版本 2.0.0rc1 中的新增功能。

method sqlalchemy.sql.compiler.SQLCompiler.construct_params(params: _CoreSingleExecuteParams | None = None, extracted_parameters: Sequence[BindParameter[Any]] | None = None, escape_names: bool = True, _group_number: int | None = None, _check: bool = True, _no_postcompile: bool = False) _MutableCoreSingleExecuteParams

返回绑定参数键和值的字典

attribute sqlalchemy.sql.compiler.SQLCompiler.current_executable

返回正在编译的当前“可执行文件”。

这目前是正在编译的 SelectInsertUpdateDeleteCompoundSelect 对象。具体来说,它被分配给 self.stack 元素列表。

当编译像上面的语句时,它通常也会被分配给 Compiler 对象的 .statement 属性。但是,所有 SQL 结构最终都是可嵌套的,此属性不应被 visit_ 方法查询,因为它不能保证被分配,也不能保证对应于正在编译的当前语句。

版本 1.3.21 中的新增功能: 为了与以前版本兼容,请使用以下方案

statement = getattr(self, "current_executable", False)
if statement is False:
    statement = self.stack[-1]["selectable"]

对于 1.4 及更高版本,确保仅使用 .current_executable;“self.stack” 的格式可能会更改。

方法 sqlalchemy.sql.compiler.SQLCompiler.default_from()

当 SELECT 语句没有 froms 且不附加 FROM 子句时调用。

为 Oracle 提供将 FROM DUAL 添加到字符串输出的机会。

方法 sqlalchemy.sql.compiler.SQLCompiler.delete_extra_from_clause(update_stmt, from_table, extra_froms, from_hints, **kw)

提供一个钩子来覆盖 DELETE..FROM 子句的生成。

这可以用来实现 DELETE..USING 例如。

MySQL 和 MSSQL 覆盖了这个。

属性 sqlalchemy.sql.compiler.SQLCompiler.effective_returning

INSERT、UPDATE 或 DELETE 的有效“returning”列。

这可能是由编译器动态计算的所谓“隐式返回”列,或基于 self.statement._returning 中存在的那些(使用 ._all_selected_columns 属性扩展为单个列)即那些使用 UpdateBase.returning() 方法明确设置的那些。

版本 2.0 中新增。

属性 sqlalchemy.sql.compiler.SQLCompiler.escaped_bind_names: util.immutabledict[str, str] = {}

绑定参数名称的延迟转义,在参数字典中查找时必须将其转换为原始名称。

方法 sqlalchemy.sql.compiler.SQLCompiler.get_select_precolumns(select, **kw)

在构建 SELECT 语句时调用,位置位于列列表之前。

方法 sqlalchemy.sql.compiler.SQLCompiler.group_by_clause(select, **kw)

允许方言自定义 GROUP BY 的渲染方式。

属性 sqlalchemy.sql.compiler.SQLCompiler.has_out_parameters = False

如果为 True,则存在设置了 isoutparam 标志的 bindparam() 对象。

属性 sqlalchemy.sql.compiler.SQLCompiler.implicit_returning: Sequence[ColumnElement[Any]] | None = None

顶层 INSERT 或 UPDATE 语句的“隐式”返回列列表,用于接收新生成的列值。

版本 2.0 中的新增功能: implicit_returning 替换了以前的 returning 集合,该集合不是通用的 RETURNING 集合,实际上它特定于“隐式返回”功能。

属性 sqlalchemy.sql.compiler.SQLCompiler.insert_prefetch: Sequence[Column[Any]] = ()

应该在 INSERT 执行之前评估其默认值的列列表

属性 sqlalchemy.sql.compiler.SQLCompiler.insert_single_values_expr

当 INSERT 使用 VALUES 表达式中的单个参数集进行编译时,字符串将分配到这里,它可以用于插入批处理方案以重写 VALUES 表达式。

版本 1.3.8 中的新增功能。

版本 2.0 中的更改: 此集合不再由 SQLAlchemy 的内置方言使用,而是支持目前内部的 _insertmanyvalues 集合,该集合仅由 SQLCompiler 使用。

属性 sqlalchemy.sql.compiler.SQLCompiler.isupdate: bool = False

类级默认值,可以在实例级设置以定义此 Compiled 实例是否代表 INSERT/UPDATE/DELETE

属性 sqlalchemy.sql.compiler.SQLCompiler.literal_execute_params: FrozenSet[BindParameter[Any]] = frozenset({})

在语句执行时被渲染为文字值的绑定参数对象。

方法 sqlalchemy.sql.compiler.SQLCompiler.order_by_clause(select, **kw)

允许方言自定义 ORDER BY 的渲染方式。

属性 sqlalchemy.sql.compiler.SQLCompiler.params

返回嵌入到此编译对象中的绑定参数字典,对于那些存在的参数。

另请参见

如何将 SQL 表达式渲染为字符串,可能包含内联的绑定参数? - 包含用于调试用例的用法示例。

属性 sqlalchemy.sql.compiler.SQLCompiler.positiontup: List[str] | None = None

对于使用位置参数样式的编译结构,将是一个字符串序列,指示绑定参数的顺序名称。

这用于按正确顺序呈现绑定参数,并与 Compiled.params 字典结合使用以呈现参数。

此序列始终包含参数的未转义名称。

另请参见

如何将 SQL 表达式渲染为字符串,可能包含内联的绑定参数? - 包含用于调试用例的用法示例。

attribute sqlalchemy.sql.compiler.SQLCompiler.post_compile_params: FrozenSet[BindParameter[Any]] = frozenset({})

在语句执行时被渲染为绑定参数占位符的绑定参数对象。

attribute sqlalchemy.sql.compiler.SQLCompiler.postfetch: List[Column[Any]] | None

在 INSERT 或 UPDATE 后可以进行后获取以接收服务器更新值的列列表。

attribute sqlalchemy.sql.compiler.SQLCompiler.postfetch_lastrowid = False

如果为 True,并且在插入中,使用 cursor.lastrowid 来填充 result.inserted_primary_key。

method sqlalchemy.sql.compiler.SQLCompiler.render_literal_value(value, type_)

将绑定参数的值渲染为带引号的文字。

这用于目标驱动程序/数据库不支持绑定参数的语句部分。

子类应使用 DBAPI 的引用服务实现此方法。

attribute sqlalchemy.sql.compiler.SQLCompiler.render_table_with_column_in_update_from: bool = False

设置为 True 类,以指示多表 UPDATE 语句中的 SET 子句是否应使用表名限定列(即仅限 MySQL)

attribute sqlalchemy.sql.compiler.SQLCompiler.returning

向后兼容性;返回 effective_returning 集合。

attribute sqlalchemy.sql.compiler.SQLCompiler.returning_precedes_values: bool = False

设置为 True 类,以在 VALUES 或 WHERE 子句之前生成 RETURNING 子句(即 MSSQL)

attribute sqlalchemy.sql.compiler.SQLCompiler.sql_compiler
attribute sqlalchemy.sql.compiler.SQLCompiler.stack: List[_CompilerStackEntry]

使用条目格式在此堆栈中跟踪 SELECT、INSERT、UPDATE、DELETE 等主要语句。

attribute sqlalchemy.sql.compiler.SQLCompiler.translate_select_structure: Any = None

如果不为 None,则应为一个可调用对象,它接受 (select_stmt, **kw) 并返回一个 select 对象。这用于结构性更改,主要用于适应 LIMIT/OFFSET 方案。

method sqlalchemy.sql.compiler.SQLCompiler.update_from_clause(update_stmt, from_table, extra_froms, from_hints, **kw)

提供一个钩子来覆盖 UPDATE..FROM 子句的生成。

MySQL 和 MSSQL 覆盖了这个。

method sqlalchemy.sql.compiler.SQLCompiler.update_limit_clause(update_stmt)

为 MySQL 提供一个钩子来将 LIMIT 添加到 UPDATE

attribute sqlalchemy.sql.compiler.SQLCompiler.update_prefetch: Sequence[Column[Any]] = ()

在 UPDATE 执行之前应评估其 onupdate 默认值的列列表。

method sqlalchemy.sql.compiler.SQLCompiler.update_tables_clause(update_stmt, from_table, extra_froms, **kw)

提供一个钩子来覆盖 UPDATE 语句中的初始表子句。

MySQL 覆盖了这一点。

method sqlalchemy.sql.compiler.SQLCompiler.visit_override_binds(override_binds, **kw)

使用绑定参数交换后,对 _OverrideBinds 的嵌套元素进行 SQL 编译。

通常不希望编译 _OverrideBinds;它旨在用于当要使用已经缓存的语句时,编译已经完成,并且只需要在执行时交换绑定参数即可。

但是,有一些测试用例会执行此对象,此外,ORM 子查询加载程序已知会将包含此构造的表达式馈送到新查询中(在 #11173 中发现),因此它必须在编译时也做正确的事情。

class sqlalchemy.sql.compiler.StrSQLCompiler

一个 SQLCompiler 子类,它允许将少量非标准 SQL 特性呈现为字符串值。

当 Core 表达式元素被直接字符串化,而不是调用 ClauseElement.compile() 方法时,将调用 StrSQLCompiler。它可以渲染有限的一组非标准 SQL 结构,以帮助进行基本的字符串化。但是,对于更复杂的自定义或特定于方言的 SQL 结构,需要直接使用 ClauseElement.compile()

method sqlalchemy.sql.compiler.StrSQLCompiler.delete_extra_from_clause(update_stmt, from_table, extra_froms, from_hints, **kw)

提供一个钩子来覆盖 DELETE..FROM 子句的生成。

这可以用来实现 DELETE..USING 例如。

MySQL 和 MSSQL 覆盖了这个。

method sqlalchemy.sql.compiler.StrSQLCompiler.update_from_clause(update_stmt, from_table, extra_froms, from_hints, **kw)

提供一个钩子来覆盖 UPDATE..FROM 子句的生成。

MySQL 和 MSSQL 覆盖了这个。

class sqlalchemy.engine.AdaptedConnection

一个适配连接对象的接口,用于支持 DBAPI 协议。

由 asyncio 方言使用,以便在驱动程序提供的 asyncio 连接/游标 API 之上提供同步风格的 pep-249 外观。

新版 1.4.24 中的新增功能。

attribute sqlalchemy.engine.AdaptedConnection.driver_connection

驱动程序在连接后返回的连接对象。

method sqlalchemy.engine.AdaptedConnection.run_async(fn: Callable[[Any], Awaitable[_T]]) _T

运行给定函数返回的 awaitable,该函数传递了原始 asyncio 驱动程序连接。

这用于在“同步”方法的上下文中(例如连接池事件处理程序)在驱动程序连接上调用仅 awaitable 的方法。

例如

engine = create_async_engine(...)

@event.listens_for(engine.sync_engine, "connect")
def register_custom_types(dbapi_connection, ...):
    dbapi_connection.run_async(
        lambda connection: connection.set_type_codec(
            'MyCustomType', encoder, decoder, ...
        )
    )

版本 1.4.30 中的新增功能。