Core 内部

此处列出了一些关键的内部构造。

对象名称 描述

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 字符串中渲染 cast 或其他指令。

此方法用于所有 PostgreSQL 方言,包括 asyncpg、pg8000、psycopg、psycopg2。实现此功能的方言可以选择哪些类型的数据类型在 SQL 语句中显式转换,哪些不转换。

当使用 RENDER_CASTS 时,编译器将为每个方言级别类型设置 TypeEngine.render_bind_cast 属性的 BindParameter 对象调用 SQLCompiler.render_bind_cast() 方法,以渲染字符串表示形式。

SQLCompiler.render_bind_cast() 也用于渲染一种 “insertmanyvalues” 查询形式的 cast,当 InsertmanyvaluesSentinelOpts.USE_INSERT_FROM_SELECTInsertmanyvaluesSentinelOpts.RENDER_SELECT_COL_CASTS 都设置时,其中 cast 应用于中间列,例如 “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 方法。

这仅针对支持此方法且 SQLAlchemy 方言为此方言设置了适当基础设施的 DBAPI 实现。当前方言包括 python-oracledb、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

这用于需要访问原始 CacheKey 实例的例程,该实例在首次缓存 Compiled 实例时生成,通常是为了协调原始 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

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

attribute sqlalchemy.engine.Compiled.sql_compiler

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

如果此编译器是其中之一,它可能会直接返回 ‘self’。

attribute sqlalchemy.engine.Compiled.state: CompilerState

编译器状态的描述

attribute sqlalchemy.engine.Compiled.statement: ClauseElement | None = None

要编译的语句。

attribute sqlalchemy.engine.Compiled.string: str = ''

statement 的字符串表示形式

class sqlalchemy.engine.interfaces.DBAPIConnection

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

2.0 版本新增。

参见

Connection Objects - 在 PEP 249

类签名

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

attribute sqlalchemy.engine.interfaces.DBAPIConnection.autocommit: bool
method sqlalchemy.engine.interfaces.DBAPIConnection.close() None
method sqlalchemy.engine.interfaces.DBAPIConnection.commit() None
method sqlalchemy.engine.interfaces.DBAPIConnection.cursor() DBAPICursor
method sqlalchemy.engine.interfaces.DBAPIConnection.rollback() None
class sqlalchemy.engine.interfaces.DBAPICursor

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

2.0 版本新增。

参见

Cursor Objects - 在 PEP 249

类签名

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

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

Cursor 的 description 属性。

参见

cursor.description - 在 PEP 249

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

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

2.0 版本新增。

参见

Type Objects - 在 PEP 249

类签名

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

class sqlalchemy.sql.compiler.DDLCompiler
method 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 对象。

参数:
  • dialect – 要编译的目标 Dialect

  • statement – 要编译的 ClauseElement

  • schema_translate_map

    用于在形成结果 SQL 时翻译的模式名称字典

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

attribute 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 类字典,映射到特定于 dialect 类的子类。此字典仅为类级别,不能从 dialect 实例本身访问。

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

使用此 dialect 的 DBAPI 建立连接。

此方法的默认实现是

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

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

对于需要在从 DBAPI 获取新连接时执行程序化的按连接步骤的 dialect,可以使用此方法。

参数:
返回:

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 构造(通常是 schema 项)的可选参数说明符集。

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

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

如果在 PostgreSQL dialect 上建立上述构造,则 Index 构造现在将接受关键字参数 postgresql_usingpostgresql_wherepostgresql_opsIndex 构造函数的任何其他以 postgresql_ 为前缀的参数都将引发 ArgumentError

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

参见

DialectKWArgs - 实现使用 DefaultDialect.construct_arguments 的基类

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

构建 DB-API 兼容的连接参数。

给定 URL 对象,返回一个元组,其中包含适合直接发送到 dbapi 的 connect 函数的 (*args, **kwargs)。参数将发送到 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 对象

返回:

一个 (*args, **kwargs) 元组,它将被传递给 Dialect.connect() 方法。

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 使用类方法 Dialect.import_dbapi() 导入 DBAPI 模块。理由是,任何 dialect 模块都可以被导入并用于生成 SQL 语句,而无需安装实际的 DBAPI 驱动程序。只有在使用 create_engine() 构造 Engine 时,DBAPI 才会被导入;届时,创建过程会将 DBAPI 模块分配给此属性。

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

在版本 The 中更改:Dialect.dbapi 属性专门用作每个 Dialect 实例对 DBAPI 模块的引用。先前未完全文档化的 .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.do_begin_twophase() 方法,该方法属于 Dialect

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

参数:
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.do_commit_twophase() 方法,该方法属于 Dialect

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

参数:
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.do_prepare_twophase() 方法,该方法属于 Dialect

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

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

继承自 Dialect.do_recover_twophase() 方法,该方法属于 Dialect

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

参数:

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

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

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

使用给定的名称创建一个保存点。

参数:
method 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 版本新增。

Changed in version 2.0: - 现在通过将 Dialect.bind_typing 设置为 BindTyping.SETINPUTSIZES 来启用 setinputsizes 模式。接受 use_setinputsizes 参数的方言应适当地设置此值。

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

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

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

当连接正在被回收或已失效时,Pool 会调用此钩子。

New in version 1.4.41.

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

方言的 DBAPI 的标识名称

attribute 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>}

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

classmethod sqlalchemy.engine.default.DefaultDialect.engine_created(engine: Engine) None

继承自 Dialect.engine_created() 方法,该方法属于 Dialect

在返回最终的 Engine 之前调用的便捷钩子。

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

方言和/或包装器应使用此钩子将特殊事件应用于引擎或其组件。特别是,它允许方言包装类应用方言级事件。

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

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

仅当 bind_typing 为 BindTyping.SET_INPUT_SIZES 时才使用此项

attribute sqlalchemy.engine.default.DefaultDialect.execute_sequence_format

tuple 的别名

attribute sqlalchemy.engine.default.DefaultDialect.execution_ctx_cls

DefaultExecutionContext 的别名

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

对于同时支持 `lastrowid` 和 `RETURNING` 插入策略的后端,对于简单的单整数主键插入,倾向于使用 `RETURNING`。

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

attribute sqlalchemy.engine.default.DefaultDialect.full_returning

Deprecated since version 2.0: `full_returning` 已弃用,请使用 `insert_returning`、`update_returning` 和 `delete_returning`

classmethod 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.0 版本新增。

method 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()

method 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()

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

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

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

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

1.3.22 版本新增。

classmethod 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() 方法,来自 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() 方法,来自 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() 方法,来自 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() 方法,来自 Dialect

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

可用名称应使用以下约定

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

  • 单词之间应使用空格分隔,而不是下划线,例如 `REPEATABLE READ`。隔离级别名称在传递给方言之前,下划线将被转换为空格。

  • 后端支持的四个标准隔离名称应为 `READ UNCOMMITTED`、`READ COMMITTED`、`REPEATABLE READ`、`SERIALIZABLE`

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

  • 还可以存在其他隔离模式,前提是它们以 UPPERCASE 命名并使用空格而不是下划线。

此函数用于使默认方言可以检查给定的隔离级别参数是否有效,否则会引发 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()

注意

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

2.0 版本新增。

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

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

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

注意

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

2.0 版本新增。

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

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

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

注意

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

2.0 版本新增。

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

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

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

注意

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

2.0 版本新增。

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

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

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

注意

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

2.0 版本新增。

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

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

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

注意

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

2.0 版本新增。

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

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

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

注意

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

2.0 版本新增。

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

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

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

注意

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 字典的字典。

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

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

继承自 Dialect.get_schema_names() 方法,源自 Dialect

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

这是一个内部 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

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

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

参数:

schema – 要查询的 schema 名称,如果不是默认 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 字典的字典。

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

引发:

对于不支持注释的 dialect,引发 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 的表名列表。

这是一个内部 dialect 方法。应用程序应使用 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 被创建时指定的选项字典。

这是一个内部 dialect 方法。应用程序应使用 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

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

这是一个内部 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

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

这是一个内部 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 字典。

这是一个内部 dialect 方法。应用程序应使用 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

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

这是一个内部 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

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

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

参数:

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

方法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() 方法实现此功能,但是 dialect 可以实现性能更高的版本。

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

1.4 版本新增。

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

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

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

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

这是一个内部方言方法。应用程序应使用 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 和可选的 schema 名称,如果给定的表在数据库中存在,则返回 True,否则返回 False。

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

注意

此方法在 SQLAlchemy 内部使用,并发布以便第三方方言可以提供实现。它**不是**用于检查表是否存在的公共 API。请使用 Inspector.has_table() 方法。

Changed in version 2.0::: Dialect.has_table() 现在正式支持检查其他类似表的对象

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

  • 任何类型的临时表

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

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

此方言是否具有单独的“terminate”实现,该实现不会阻止或需要等待。

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

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

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

继承自 Dialect.import_dbapi() 方法,该方法属于 Dialect

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

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

Changed in version 2.0: 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 对象,具有完整的功能。

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

注意

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

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

指示方言是否支持与 Table 或 Column 的定义内联的注释 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 行的排序。

New in version 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 模块。

对于包含设置 provisioning followers 的 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

New in version 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 模式等。

“do_on_connect” 可调用对象通过使用 PoolEvents.connect() 事件钩子调用,然后解包 DBAPI 连接并将其传递到可调用对象中。

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

Changed in version 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() 方法,该方法属于 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() 方法,否则**将不会调用** Dialect.on_connect() 方法。

New in version 1.4.3: 添加了 Dialect.on_connect_url(),它通常调用 Dialect.on_connect()

参数:

url – 一个 URL 对象,表示传递给 Dialect.create_connect_args() 方法的 URL

返回:

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

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

要使用的 paramstyle(某些 DB-API 支持多种 paramstyle)。

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

如果此 Dialect 的 paramstyle 是 positional,则为 True。

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

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

当前,这面向 PostgreSQL,当 Table 对象上使用 implicit_returning=False 参数时。

attribute sqlalchemy.engine.default.DefaultDialect.preparer

IdentifierPreparer 的别名

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

继承自 Dialect.reflection_options 属性,该属性属于 Dialect

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

当前的示例是 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 隔离级别

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

指示驱动程序是否为 SQL “binary” 数据类型原生返回 Python bytes() 对象。

2.0.11 版本新增。

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

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

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

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

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

一个元组,包含正在使用的数据库后端的版本号。

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

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

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

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

1.4 版本新增。

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

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

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

方法 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 隔离级别

属性 sqlalchemy.engine.default.DefaultDialect.statement_compiler

SQLCompiler 的别名

属性 sqlalchemy.engine.default.DefaultDialect.supports_alter: bool = True

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

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

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

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

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

2.0 版本新增。

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

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

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

方言支持 INSERT… DEFAULT VALUES 语法

属性 sqlalchemy.engine.default.DefaultDialect.supports_empty_insert: bool = True

方言支持 INSERT () VALUES ()

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

目标数据库支持 IDENTITY

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

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

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

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

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

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

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

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

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

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

2.0 版本新增。

属性 sqlalchemy.engine.default.DefaultDialect.supports_sane_multi_rowcount: bool = True

指示当通过 executemany 执行时,方言是否正确地为 UPDATEDELETE 语句实现了 rowcount。

属性 sqlalchemy.engine.default.DefaultDialect.supports_sane_rowcount: bool = True

指示方言是否正确地为 UPDATEDELETE 语句实现了 rowcount。

属性 sqlalchemy.engine.default.DefaultDialect.supports_sane_rowcount_returning

如果即使在使用 RETURNING 的情况下,此方言也支持合理的 rowcount,则为 True。

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

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

指示方言是否支持 CREATE SEQUENCE 或类似语法。

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

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

属性 sqlalchemy.engine.default.DefaultDialect.supports_simple_order_by_label: bool = True

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

属性 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

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

2.0 版本新增。

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

给定来自 types 模块的通用对象,提供一个特定于数据库的 TypeEngine 对象。

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

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

方言支持带有 executemany 的 UPDATE..RETURNING。

属性 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 执行,该执行允许通过重写单行 INSERT 语句以具有多个 VALUES 子句,并为一系列批次多次执行该语句(当给出大量行时),来实现使用 RETURNING 插入多行。

对于默认方言,此参数为 False,对于 SQLAlchemy 内部方言 SQLite、MySQL/MariaDB、PostgreSQL、SQL Server,此参数设置为 True。对于 Oracle Database,此参数仍为 False,Oracle Database 提供了原生的 “executemany with RETURNING” 支持,并且也不支持 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 查询生成、执行、结果集处理或任何其他在数据库之间有所不同的方面都定义在 Dialect 的通用类别下。Dialect 充当其他特定于数据库的对象实现的工厂,包括 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

类签名

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

attribute sqlalchemy.engine.Dialect.bind_typing = 1

定义一种将类型信息传递到数据库和/或驱动程序以用于绑定参数的方法。

有关值,请参阅 BindTyping

2.0 版本新增。

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

sqlalchemy.types 中的 TypeEngine 类字典,映射到特定于 dialect 类的子类。此字典仅为类级别,不能从 dialect 实例本身访问。

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

使用此 dialect 的 DBAPI 建立连接。

此方法的默认实现是

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

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

对于需要在从 DBAPI 获取新连接时执行程序化的按连接步骤的 dialect,可以使用此方法。

参数:
返回:

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

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

各种 SQLAlchemy 构造(通常是 schema 项)的可选参数说明符集。

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

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

如果在 PostgreSQL dialect 上建立上述构造,则 Index 构造现在将接受关键字参数 postgresql_usingpostgresql_wherepostgresql_opsIndex 构造函数的任何其他以 postgresql_ 为前缀的参数都将引发 ArgumentError

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

参见

DialectKWArgs - 实现使用 DefaultDialect.construct_arguments 的基类

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

构建 DB-API 兼容的连接参数。

给定 URL 对象,返回一个元组,其中包含适合直接发送到 dbapi 的 connect 函数的 (*args, **kwargs)。参数将发送到 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 对象

返回:

一个 (*args, **kwargs) 元组,它将被传递给 Dialect.connect() 方法。

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 使用类方法 Dialect.import_dbapi() 导入 DBAPI 模块。理由是,任何 dialect 模块都可以被导入并用于生成 SQL 语句,而无需安装实际的 DBAPI 驱动程序。只有在使用 create_engine() 构造 Engine 时,DBAPI 才会被导入;届时,创建过程会将 DBAPI 模块分配给此属性。

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

在版本 The 中更改:Dialect.dbapi 属性专门用作每个 Dialect 实例对 DBAPI 模块的引用。先前未完全文档化的 .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]

用于编译 DDL 语句的 Compiled

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]

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

参数:

connection – 一个 Connection

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 版本新增。

Changed in version 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 会调用此钩子。

New in version 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]]]

根据 cursor.execute() 接受的第二个参数的类型(它们各不相同),是 ‘tuple’ 或 ‘list’ 类型。

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.0 版本新增。

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 类

method sqlalchemy.engine.Dialect.get_driver_connection(connection: DBAPIConnection) Any

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

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

1.4.24 版本新增。

method 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']]

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

可用名称应使用以下约定

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

  • 单词之间应使用空格分隔,而不是下划线,例如 `REPEATABLE READ`。隔离级别名称在传递给方言之前,下划线将被转换为空格。

  • 后端支持的四个标准隔离名称应为 `READ UNCOMMITTED`、`READ COMMITTED`、`REPEATABLE READ`、`SERIALIZABLE`

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

  • 还可以存在其他隔离模式,前提是它们以 UPPERCASE 命名并使用空格而不是下划线。

此函数用于使默认方言可以检查给定的隔离级别参数是否有效,否则会引发 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。希望支持更快实现的 Dialect 应该实现此方法。

2.0 版本新增。

方法 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 中所有表中的列信息。

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

注意

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

2.0 版本新增。

方法 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 中所有表中的外键信息。

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

注意

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

2.0 版本新增。

方法 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 中所有表中的索引信息。

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

注意

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

2.0 版本新增。

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

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

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

注意

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

2.0 版本新增。

方法 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 中所有表的表注释信息。

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

注意

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

2.0 版本新增。

方法 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]]]

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

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

注意

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

2.0 版本新增。

方法 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 中所有表中的唯一约束信息。

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

注意

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

2.0 版本新增。

方法 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 字典的字典。

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

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

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

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

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

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

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

参数:

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

1.4 版本新增。

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

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

给定一个字符串 table_name 和一个可选的字符串 schema,返回表注释信息,其为一个对应于 ReflectedTableComment 字典的字典。

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

引发:

对于不支持注释的 dialect,引发 NotImplementedError

1.2 版本新增。

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

返回 schema 的表名列表。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

参数:

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

方法 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() 方法实现此功能,但是 dialect 可以实现性能更高的版本。

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

1.4 版本新增。

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

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

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

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

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

2.0 版本新增。

方法 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 和可选的 schema 名称,如果给定的表在数据库中存在,则返回 True,否则返回 False。

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

注意

此方法在 SQLAlchemy 内部使用,并发布以便第三方方言可以提供实现。它**不是**用于检查表是否存在的公共 API。请使用 Inspector.has_table() 方法。

Changed in version 2.0::: Dialect.has_table() 现在正式支持检查其他类似表的对象

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

  • 任何类型的临时表

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

attribute sqlalchemy.engine.Dialect.has_terminate: bool

此方言是否具有单独的“terminate”实现,该实现不会阻止或需要等待。

attribute sqlalchemy.engine.Dialect.identifier_preparer: IdentifierPreparer

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

classmethod sqlalchemy.engine.Dialect.import_dbapi() module

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

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

Changed in version 2.0: Dialect.import_dbapi() 类方法从以前的方法 .Dialect.dbapi() 重命名而来,后者将在方言实例化时被 DBAPI 模块本身替换,因此以两种不同的方式使用相同的名称。如果第三方方言上存在 .Dialect.dbapi() 类方法,则将使用它,并且将发出弃用警告。

attribute 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 对象,具有完整的功能。

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

注意

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

attribute sqlalchemy.engine.Dialect.inline_comments: bool

指示方言是否支持与 Table 或 Column 的定义内联的注释 DDL。如果为 False,则表示必须使用 ALTER 来设置表和列注释。

attribute sqlalchemy.engine.Dialect.insert_executemany_returning: bool

当使用 dialect.do_executemany() 时,方言/驱动程序/数据库是否支持提供 INSERT…RETURNING 支持的某种方式。

attribute sqlalchemy.engine.Dialect.insert_executemany_returning_sort_by_parameter_order: bool

当使用 dialect.do_executemany() 以及设置了 Insert.returning.sort_by_parameter_order 参数时,方言/驱动程序/数据库是否支持提供 INSERT…RETURNING 支持的某种方式。

attribute sqlalchemy.engine.Dialect.insert_returning: bool

如果方言支持 INSERT 的 RETURNING

2.0 版本新增。

attribute sqlalchemy.engine.Dialect.insertmanyvalues_implicit_sentinel: InsertmanyvaluesSentinelOpts

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

New in version 2.0.10.

attribute sqlalchemy.engine.Dialect.insertmanyvalues_max_parameters: int

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

attribute sqlalchemy.engine.Dialect.insertmanyvalues_page_size: int

对于 ExecuteStyle.INSERTMANYVALUES 执行,要渲染到单个 INSERT..VALUES() 语句中的行数。

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

2.0 版本新增。

参见

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

attribute 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

attribute sqlalchemy.engine.Dialect.label_length: int | None

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

classmethod sqlalchemy.engine.Dialect.load_provisioning() None

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

对于包含设置 provisioning followers 的 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

New in version 1.3.14.

attribute sqlalchemy.engine.Dialect.loaded_dbapi

same as .dbapi, but is never None; will raise an error if no DBAPI was set up.

2.0 版本新增。

attribute sqlalchemy.engine.Dialect.max_identifier_length: int

标识符名称的最大长度。

attribute 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 模式等。

“do_on_connect” 可调用对象通过使用 PoolEvents.connect() 事件钩子调用,然后解包 DBAPI 连接并将其传递到可调用对象中。

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

Changed in version 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() 方法,否则**将不会调用** Dialect.on_connect() 方法。

New in version 1.4.3: 添加了 Dialect.on_connect_url(),它通常调用 Dialect.on_connect()

参数:

url – 一个 URL 对象,表示传递给 Dialect.create_connect_args() 方法的 URL 对象。

返回:

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

attribute sqlalchemy.engine.Dialect.paramstyle: str

要使用的 paramstyle(某些 DB-API 支持多种 paramstyle)。

attribute sqlalchemy.engine.Dialect.positional: bool

如果此 Dialect 的 paramstyle 是 positional,则为 True。

attribute sqlalchemy.engine.Dialect.preexecute_autoincrement_sequences: bool

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

当前,这面向 PostgreSQL,当 Table 对象上使用 implicit_returning=False 参数时。

attribute sqlalchemy.engine.Dialect.preparer: Type[IdentifierPreparer]

a IdentifierPreparer class used to quote identifiers.

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

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

当前的示例是 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 “binary” 数据类型原生返回 Python bytes() 对象。

2.0.11 版本新增。

attribute sqlalchemy.engine.Dialect.sequences_optional: bool

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

attribute sqlalchemy.engine.Dialect.server_side_cursors: bool

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

attribute sqlalchemy.engine.Dialect.server_version_info: Tuple[Any, ...] | None

一个元组,包含正在使用的数据库后端的版本号。

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

方法 sqlalchemy.engine.Dialect.set_connection_execution_options(connection: Connection, opts: CoreExecuteOptionsParameter) None

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

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

1.4 版本新增。

方法 sqlalchemy.engine.Dialect.set_engine_execution_options(engine: Engine, opts: CoreExecuteOptionsParameter) None

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

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

方法 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 隔离级别

属性 sqlalchemy.engine.Dialect.statement_compiler: Type[SQLCompiler]

用于编译 SQL 语句的 Compiled

属性 sqlalchemy.engine.Dialect.supports_alter: bool

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

属性 sqlalchemy.engine.Dialect.supports_comments: bool

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

属性 sqlalchemy.engine.Dialect.supports_constraint_comments: bool

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

2.0 版本新增。

属性 sqlalchemy.engine.Dialect.supports_default_metavalue: bool

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

大多数数据库都以某种方式支持此语法,例如 SQLite 使用 VALUES (NULL) 支持它。MS SQL Server 也支持此语法,但是是唯一包含的禁用此功能的方言,因为 MSSQL 不支持 IDENTITY 列的字段,而这通常是我们希望使用此功能的地方。

属性 sqlalchemy.engine.Dialect.supports_default_values: bool

方言支持 INSERT… DEFAULT VALUES 语法

属性 sqlalchemy.engine.Dialect.supports_empty_insert: bool

方言支持 INSERT () VALUES (),即一个没有列的纯 INSERT 语句。

这通常不被支持;“空”插入通常适用于 “INSERT..DEFAULT VALUES” 或 “INSERT … (col) VALUES (DEFAULT)”。

属性 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

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

2.0 版本新增。

方法 sqlalchemy.engine.Dialect.type_descriptor(typeobj: TypeEngine[_T]) TypeEngine[_T]

将通用类型转换为特定于方言的类型。

方言类通常会使用 types 模块中的 adapt_type() 函数来完成此操作。

返回的结果会按方言类进行缓存,因此不能包含任何方言实例状态。

属性 sqlalchemy.engine.Dialect.update_executemany_returning: bool

方言支持带有 executemany 的 UPDATE..RETURNING。

属性 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 执行,该执行允许通过重写单行 INSERT 语句以具有多个 VALUES 子句,并为一系列批次多次执行该语句(当给出大量行时),来实现使用 RETURNING 插入多行。

对于默认方言,此参数为 False,对于 SQLAlchemy 内部方言 SQLite、MySQL/MariaDB、PostgreSQL、SQL Server,此参数设置为 True。对于 Oracle Database,此参数仍为 False,Oracle Database 提供了原生的 “executemany with RETURNING” 支持,并且也不支持 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
属性 sqlalchemy.engine.default.DefaultExecutionContext.compiled: Compiled | None = None

如果传递给构造函数,则为正在执行的 sqlalchemy.engine.base.Compiled 对象

属性 sqlalchemy.engine.default.DefaultExecutionContext.connection: Connection

Connection 对象,默认值生成器可以自由使用它来执行 SQL。此 Connection 应该引用 root_connection 的相同底层连接/事务资源。

方法 sqlalchemy.engine.default.DefaultExecutionContext.create_cursor()

从这个 ExecutionContext 的连接生成并返回一个新的游标。

某些方言可能希望更改 connection.cursor() 的行为,例如 postgresql 可能会返回一个 PG “服务器端”游标。

属性 sqlalchemy.engine.default.DefaultExecutionContext.current_parameters: _CoreSingleExecuteParams | None = None

应用于当前行的参数字典。

此属性仅在用户定义的默认生成函数的上下文中可用,例如 上下文相关的默认函数 中描述的那样。它由一个字典组成,该字典包含要成为 INSERT 或 UPDATE 语句一部分的每个列/值对的条目。字典的键将是每个 Column 的键值,这通常与名称同义。

请注意,DefaultExecutionContext.current_parameters 属性不适用于 Insert.values() 方法的“多值”功能。DefaultExecutionContext.get_current_parameters() 方法应为首选。

属性 sqlalchemy.engine.default.DefaultExecutionContext.cursor: DBAPICursor

从连接中获取的 DB-API 游标

属性 sqlalchemy.engine.default.DefaultExecutionContext.dialect: Dialect

创建此 ExecutionContext 的方言。

属性 sqlalchemy.engine.default.DefaultExecutionContext.engine: Engine

Connection 与之关联的引擎

属性 sqlalchemy.engine.default.DefaultExecutionContext.execute_style: ExecuteStyle = 0

将用于执行语句的 DBAPI 游标方法的样式。

2.0 版本新增。

属性 sqlalchemy.engine.default.DefaultExecutionContext.executemany: bool

如果上下文包含多个参数集列表,则为 True。

从历史上看,此属性链接到是否将使用 cursor.execute()cursor.executemany()。它现在也可以表示可能使用 “insertmanyvalues”,这表示一次或多次 cursor.execute() 调用。

属性 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 的方言不需要考虑此钩子。

New in version 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 标志时,将调用此方法。 如果语句本身具有设置了 .isoutparam 标志的 BindParameter 对象,且这些对象被 SQLCompiler.visit_bindparam() 方法使用,则此标志将被设置为 True。 如果数据库方言编译器生成了设置了 .isoutparam 标志但未被 SQLCompiler.visit_bindparam() 处理的 BindParameter 对象,则应显式设置此标志。

为每个绑定参数渲染的名称列表会传递给此方法。 然后,此方法应返回与参数对象列表对应的值序列。 与之前的 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() 方法中设置 OUT 参数的做法。

方法 sqlalchemy.engine.default.DefaultExecutionContext.get_result_processor(type_, colname, coltype)

为游标描述中给定的类型返回一个“结果处理器”。

这有一个默认实现,数据库方言可以覆盖它以进行上下文相关的结果类型处理。

方法 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

属性 sqlalchemy.engine.default.DefaultExecutionContext.parameters: _DBAPIMultiExecuteParams

传递给 execute() 或 exec_driver_sql() 方法的绑定参数。

这些参数始终存储为参数条目列表。 单元素列表对应于 cursor.execute() 调用,多元素列表对应于 cursor.executemany(),但 ExecuteStyle.INSERTMANYVALUES 除外,后者将一次或多次使用 cursor.execute()

方法 sqlalchemy.engine.default.DefaultExecutionContext.post_exec()

在编译语句执行后调用。

如果编译语句已传递给此 ExecutionContext,则在此方法完成后,last_insert_idslast_inserted_params 等数据成员应可用。

属性 sqlalchemy.engine.default.DefaultExecutionContext.postfetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

一个 Column 对象列表,用于表示已触发服务器端默认值或内联 SQL 表达式值的列。 适用于插入和更新。

方法 sqlalchemy.engine.default.DefaultExecutionContext.pre_exec()

在编译语句执行之前调用。

如果编译语句已传递给此 ExecutionContext,则在此语句完成后,必须初始化 statementparameters 数据成员。

属性 sqlalchemy.engine.default.DefaultExecutionContext.prefetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

一个 Column 对象列表,用于表示已触发客户端默认值的列。 适用于插入和更新。

属性 sqlalchemy.engine.default.DefaultExecutionContext.root_connection: Connection

作为此 ExecutionContext 源的 Connection 对象。

sqlalchemy.engine.ExecutionContext

Dialect 的消息传递对象,对应于单个执行。

属性 sqlalchemy.engine.ExecutionContext.compiled: Compiled | None

如果传递给构造函数,则为正在执行的 sqlalchemy.engine.base.Compiled 对象

属性 sqlalchemy.engine.ExecutionContext.connection: Connection

Connection 对象,默认值生成器可以自由使用它来执行 SQL。此 Connection 应该引用 root_connection 的相同底层连接/事务资源。

方法 sqlalchemy.engine.ExecutionContext.create_cursor() DBAPICursor

从这个 ExecutionContext 的连接生成并返回一个新的游标。

某些方言可能希望更改 connection.cursor() 的行为,例如 postgresql 可能会返回一个 PG “服务器端”游标。

属性 sqlalchemy.engine.ExecutionContext.cursor: DBAPICursor

从连接中获取的 DB-API 游标

属性 sqlalchemy.engine.ExecutionContext.dialect: Dialect

创建此 ExecutionContext 的方言。

属性 sqlalchemy.engine.ExecutionContext.engine: Engine

Connection 与之关联的引擎

属性 sqlalchemy.engine.ExecutionContext.execute_style: ExecuteStyle

将用于执行语句的 DBAPI 游标方法的样式。

2.0 版本新增。

属性 sqlalchemy.engine.ExecutionContext.executemany: bool

如果上下文包含多个参数集列表,则为 True。

从历史上看,此属性链接到是否将使用 cursor.execute()cursor.executemany()。它现在也可以表示可能使用 “insertmanyvalues”,这表示一次或多次 cursor.execute() 调用。

属性 sqlalchemy.engine.ExecutionContext.execution_options: _ExecuteOptions

与当前语句执行关联的执行选项

方法 sqlalchemy.engine.ExecutionContext.fetchall_for_returning(cursor: DBAPICursor) Sequence[Any]

对于 RETURNING 结果,从 DBAPI 游标传递 cursor.fetchall()。

这是一个特定于方言的钩子,用于在调用为 “RETURNING” 语句传递的行时有特殊考虑的方言。默认实现是 cursor.fetchall()

此钩子目前仅由 insertmanyvalues 功能使用。未设置 use_insertmanyvalues=True 的方言不需要考虑此钩子。

New in version 2.0.10.

方法 sqlalchemy.engine.ExecutionContext.fire_sequence(seq: Sequence_SchemaItem, type_: Integer) int

给定一个 Sequence,调用它并返回下一个 int 值

方法 sqlalchemy.engine.ExecutionContext.get_out_parameter_values(out_param_names: Sequence[str]) Sequence[Any]

从游标返回 OUT 参数值序列。

对于支持 OUT 参数的数据库方言,当存在一个设置了 SQLCompiler 对象的 SQLCompiler.has_out_parameters 标志时,将调用此方法。 如果语句本身具有设置了 .isoutparam 标志的 BindParameter 对象,且这些对象被 SQLCompiler.visit_bindparam() 方法使用,则此标志将被设置为 True。 如果数据库方言编译器生成了设置了 .isoutparam 标志但未被 SQLCompiler.visit_bindparam() 处理的 BindParameter 对象,则应显式设置此标志。

为每个绑定参数渲染的名称列表会传递给此方法。 然后,此方法应返回与参数对象列表对应的值序列。 与之前的 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() 方法中设置 OUT 参数的做法。

方法 sqlalchemy.engine.ExecutionContext.get_rowcount() int | None

返回 DBAPI cursor.rowcount 值,或者在某些情况下返回解释后的值。

有关详细信息,请参阅 CursorResult.rowcount

方法 sqlalchemy.engine.ExecutionContext.handle_dbapi_exception(e: BaseException) None

接收在执行、结果获取等操作时发生的 DBAPI 异常。

属性 sqlalchemy.engine.ExecutionContext.invoked_statement: Executable | None

最初给定的 Executable 语句对象。

这应该在结构上等同于 compiled.statement,但不一定是同一个对象,因为在缓存场景中,编译后的形式将从缓存中提取。

属性 sqlalchemy.engine.ExecutionContext.isinsert: bool

如果语句是 INSERT,则为 True。

属性 sqlalchemy.engine.ExecutionContext.isupdate: bool

如果语句是 UPDATE,则为 True。

方法 sqlalchemy.engine.ExecutionContext.lastrow_has_defaults() bool

如果上次 INSERT 或 UPDATE 行包含内联或数据库端默认值,则返回 True。

属性 sqlalchemy.engine.ExecutionContext.no_parameters: bool

如果执行样式不使用参数,则为 True

属性 sqlalchemy.engine.ExecutionContext.parameters: _AnyMultiExecuteParams

传递给 execute() 或 exec_driver_sql() 方法的绑定参数。

这些参数始终存储为参数条目列表。 单元素列表对应于 cursor.execute() 调用,多元素列表对应于 cursor.executemany(),但 ExecuteStyle.INSERTMANYVALUES 除外,后者将一次或多次使用 cursor.execute()

方法 sqlalchemy.engine.ExecutionContext.post_exec() None

在编译语句执行后调用。

如果编译语句已传递给此 ExecutionContext,则在此方法完成后,last_insert_idslast_inserted_params 等数据成员应可用。

属性 sqlalchemy.engine.ExecutionContext.postfetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

一个 Column 对象列表,用于表示已触发服务器端默认值或内联 SQL 表达式值的列。 适用于插入和更新。

方法 sqlalchemy.engine.ExecutionContext.pre_exec() None

在编译语句执行之前调用。

如果编译语句已传递给此 ExecutionContext,则在此语句完成后,必须初始化 statementparameters 数据成员。

属性 sqlalchemy.engine.ExecutionContext.prefetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

一个 Column 对象列表,用于表示已触发客户端默认值的列。 适用于插入和更新。

属性 sqlalchemy.engine.ExecutionContext.root_connection: Connection

作为此 ExecutionContext 源的 Connection 对象。

属性 sqlalchemy.engine.ExecutionContext.statement: str

要执行的语句的字符串版本。 要么传递给构造函数,要么必须在 pre_exec() 完成时从 sql.Compiled 对象创建。

sqlalchemy.sql.compiler.ExpandedState

表示在为语句生成“扩展”和“后编译”绑定参数时要使用的状态。

“展开的”参数是在语句执行时生成的参数,以适应传递的参数数量,最突出的例子是 IN 表达式内部的各个元素。

“后编译”参数是在执行时将 SQL 字面值渲染到 SQL 语句中的参数,而不是作为单独的参数传递给驱动程序。

要创建 ExpandedState 实例,请在任何 SQLCompiler 实例上使用 SQLCompiler.construct_expanded_state() 方法。

类签名

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

阻止预先添加模式名称。对于不支持模式的数据库很有用。

method sqlalchemy.sql.compiler.IdentifierPreparer.format_column(column, use_table=False, name=None, table_name=None, use_schema=False, anon_map=None)

准备带引号的列名。

method sqlalchemy.sql.compiler.IdentifierPreparer.format_label_name(name, anon_map=None)

准备带引号的列名。

method sqlalchemy.sql.compiler.IdentifierPreparer.format_schema(name)

准备带引号的模式名称。

method sqlalchemy.sql.compiler.IdentifierPreparer.format_table(table, use_schema=True, name=None)

准备带引号的表名和模式名称。

method sqlalchemy.sql.compiler.IdentifierPreparer.format_table_seq(table, use_schema=True)

将表名和模式格式化为元组。

method sqlalchemy.sql.compiler.IdentifierPreparer.quote(ident: str, force: Any | None = None) str

有条件地引用标识符。

如果标识符是保留字、包含需要引号的字符,或者是 quoted_name 的实例(包括设置为 Truequote ),则会引用该标识符。

子类可以覆盖此方法,以提供依赖于数据库的标识符名称引用行为。

参数:
method sqlalchemy.sql.compiler.IdentifierPreparer.quote_identifier(value: str) str

引用标识符。

子类应覆盖此方法,以提供依赖于数据库的引用行为。

method sqlalchemy.sql.compiler.IdentifierPreparer.quote_schema(schema: str, force: Any | None = None) str

有条件地引用模式名称。

如果名称是保留字、包含需要引号的字符,或者是 quoted_name 的实例(包括设置为 Truequote ),则会引用该名称。

子类可以覆盖此方法,以提供依赖于数据库的模式名称引用行为。

参数:
attribute sqlalchemy.sql.compiler.IdentifierPreparer.schema_for_object: _SchemaForObjectCallable = operator.attrgetter('schema')

返回对象的 .schema 属性。

对于默认的 IdentifierPreparer,对象的模式始终是“ .schema” 属性的值。如果 preparer 被替换为具有非空 schema_translate_map 的 preparer,则“ .schema” 属性的值将呈现为一个符号,该符号将在编译后从映射转换为实际的模式名称。

method 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 中

属性sqlalchemy.sql.compiler.SQLCompiler.bindname_escape_characters: ClassVar[Mapping[str, str]] = {' ': '_', '%': 'P', '(': 'A', ')': 'Z', '.': '_', ':': 'C', '[': '_', ']': '_'}

一个映射(例如 dict 或类似物),包含一个字符查找表,该表将字符键入替换字符,这些替换字符将应用于 SQL 语句中使用的所有“绑定名称”,作为“转义”的一种形式;给定的字符在 SQL 语句中呈现时将被完全替换为“替换”字符,并且对传递给诸如 Connection.execute() 等方法的参数字典中使用的传入名称执行类似的转换。

这允许在 bindparam() 和其他构造中使用的绑定参数名称可以包含任何任意字符,而无需担心目标数据库完全不允许的字符。

第三方方言可以在此处建立自己的字典来替换默认映射,这将确保映射中的特定字符永远不会出现在绑定参数名称中。

字典在类创建时进行评估,因此无法在运行时修改;它必须在首次声明类时就存在于类中。

请注意,对于具有其他绑定参数规则(例如对前导字符的额外限制)的方言,可能需要增强 SQLCompiler.bindparam_string() 方法。 有关示例,请参见 cx_Oracle 编译器。

2.0.0rc1 版本中新增。

属性sqlalchemy.sql.compiler.SQLCompiler.binds: Dict[str, BindParameter[Any]]

绑定参数键到 BindParameter 实例的字典。

属性sqlalchemy.sql.compiler.SQLCompiler.bindtemplate: str

基于 paramstyle 渲染绑定参数的模板。

属性sqlalchemy.sql.compiler.SQLCompiler.compilation_bindtemplate: str

编译器在应用位置参数样式之前用于渲染参数的模板

方法sqlalchemy.sql.compiler.SQLCompiler.construct_expanded_state(params: _CoreSingleExecuteParams | None = None, escape_names: bool = True) ExpandedState

为给定的参数集返回一个新的 ExpandedState

对于使用“扩展”或其他延迟渲染参数的查询,此方法将同时提供最终的 SQL 字符串以及将用于特定参数集的参数。

2.0.0rc1 版本中新增。

方法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

返回绑定参数键和值的字典

属性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.delete_limit_clause(delete_stmt)

为 MySQL 提供一个钩子,以将 LIMIT 添加到 DELETE 中

属性sqlalchemy.sql.compiler.SQLCompiler.effective_returning

INSERT、UPDATE 或 DELETE 的有效“returning”列。

这可以是所谓的“隐式 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 语句的“隐式” returning 列列表,用于接收新生成的列值。

2.0 版本中新增: implicit_returning 替换了之前的 returning 集合,该集合不是通用的 RETURNING 集合,而实际上是特定于“隐式 returning”功能。

属性sqlalchemy.sql.compiler.SQLCompiler.insert_prefetch: Sequence[Column[Any]] = ()

应在 INSERT 发生之前评估默认值的列列表

属性sqlalchemy.sql.compiler.SQLCompiler.insert_single_values_expr

当使用 VALUES 表达式内的单个参数集编译 INSERT 时,字符串将在此处分配,它可用于插入批处理方案以重写 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({})

在语句执行时呈现为文字值的 bindparameter 对象。

方法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 表达式渲染为字符串,可能带有内联的绑定参数? - 包括用于调试用例的用法示例。

属性sqlalchemy.sql.compiler.SQLCompiler.post_compile_params: FrozenSet[BindParameter[Any]] = frozenset({})

在语句执行时呈现为绑定参数占位符的 bindparameter 对象。

属性sqlalchemy.sql.compiler.SQLCompiler.postfetch: List[Column[Any]] | None

可以在 INSERT 或 UPDATE 之后进行后获取以接收服务器更新的值的列列表

属性sqlalchemy.sql.compiler.SQLCompiler.postfetch_lastrowid = False

如果为 True,并且这是 insert,则使用 cursor.lastrowid 来填充 result.inserted_primary_key。

方法sqlalchemy.sql.compiler.SQLCompiler.render_literal_value(value, type_)

将绑定参数的值渲染为带引号的文字值。

这用于语句部分,这些部分不接受目标驱动程序/数据库上的绑定参数。

这应由子类使用 DBAPI 的引用服务来实现。

属性sqlalchemy.sql.compiler.SQLCompiler.render_table_with_column_in_update_from: bool = False

设置为 True 类级别,以指示多表 UPDATE 语句中的 SET 子句应使用表名限定列(即仅限 MySQL)

属性sqlalchemy.sql.compiler.SQLCompiler.returning

向后兼容性; 返回 effective_returning 集合。

属性sqlalchemy.sql.compiler.SQLCompiler.returning_precedes_values: bool = False

设置为 True 类级别,以在 VALUES 或 WHERE 子句之前生成 RETURNING 子句(即 MSSQL)

属性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 提供一个钩子,以便向 UPDATE 添加 LIMIT

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, from_hints, **kw)

提供一个钩子来覆盖 UPDATE 语句中的初始表子句。

MySQL 覆盖了此项。

method sqlalchemy.sql.compiler.SQLCompiler.visit_override_binds(override_binds, **kw)

SQL 编译 _OverrideBinds 的嵌套元素,并替换 bindparams。

通常不希望编译 _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

运行给定函数返回的可等待对象,该函数被传递原始 asyncio 驱动程序连接。

这用于在“同步”方法的上下文中(例如连接池事件处理程序)调用驱动程序连接上的仅可等待方法。

例如:

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 版本新增。