SqlAlchemy 2.0 中文文档(四十七)(8)

简介: SqlAlchemy 2.0 中文文档(四十七)

SqlAlchemy 2.0 中文文档(四十七)(7)https://developer.aliyun.com/article/1563054


第三方方言的缓存

attribute tuple_in_values: bool

目标数据库是否支持元组 IN,即(x, y) IN ((q, p), (r, z))。

attribute type_compiler: Any

传统的;这是一个 TypeCompiler 类在类级别,一个 TypeCompiler 实例在实例级别。

请参阅 type_compiler_instance。

attribute type_compiler_cls: ClassVar[Type[TypeCompiler]]

用于编译 SQL 类型对象的Compiled类。

新版本 2.0 中新增。

attribute type_compiler_instance: TypeCompiler

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

新版本 2.0 中新增。

classmethod type_descriptor(typeobj: TypeEngine[_T]) → TypeEngine[_T]

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

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

返回的结果被缓存每个方言类,因此可能不包含方言实例状态。

attribute update_executemany_returning: bool

方言支持具有executemany的 UPDATE…RETURNING。

attribute update_returning: bool

如果方言支持带有 UPDATE 的 RETURNING。

新版本 2.0 中新增。

attribute update_returning_multifrom: bool

如果方言支持带有 UPDATE…FROM 的 RETURNING。

新版本 2.0 中新增。

attribute use_insertmanyvalues: bool

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

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

如果supports_multivalues_insertinsert_returninguse_insertmanyvalues都为 True,则 SQL 编译器将生成一个 INSERT,该 INSERT 将由DefaultDialect解释为ExecuteStyle.INSERTMANYVALUES执行,通过重新编写单行 INSERT 语句以具有多个 VALUES 子句,当给定大量行时,还会多次执行该语句以进行一系列批处理。

该参数对于默认方言为 False,并且对于 SQLAlchemy 内部方言 SQLite、MySQL/MariaDB、PostgreSQL、SQL Server 设置为 True。对于提供原生“带 RETURNING 的 executemany”支持且不支持supports_multivalues_insert的 Oracle,它保持为 False。对于 MySQL/MariaDB,那些不支持 RETURNING 的 MySQL 方言将不会将insert_executemany_returning报告为 True。

版本 2.0 中的新功能。

另请参阅

INSERT 语句的“插入多个值”行为

attribute use_insertmanyvalues_wo_returning: bool

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

版本 2.0 中的新功能。

另请参阅

INSERT 语句的“插入多个值”行为

class sqlalchemy.engine.default.DefaultExecutionContext

成员

编译, 连接, create_cursor(), current_parameters, cursor, dialect, engine, execute_style, executemany, execution_options, fetchall_for_returning(), get_current_parameters(), get_lastrowid(), get_out_parameter_values(), get_result_processor(), handle_dbapi_exception(), invoked_statement, isinsert, isupdate, lastrow_has_defaults(), no_parameters, parameters, post_exec(), postfetch_cols, pre_exec(), prefetch_cols, root_connection

类签名

sqlalchemy.engine.default.DefaultExecutionContext (sqlalchemy.engine.interfaces.ExecutionContext)

attribute compiled: Compiled | None = None

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

attribute connection: Connection

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

method create_cursor()

从此 ExecutionContext 的连接生成一个新的游��。

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

attribute current_parameters: _CoreSingleExecuteParams | None = None

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

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

请注意,DefaultExecutionContext.current_parameters 属性不适用于 Insert.values() 方法的“多值”特性。应优先使用 DefaultExecutionContext.get_current_parameters() 方法。

另请参阅

DefaultExecutionContext.get_current_parameters()

上下文敏感的默认函数

attribute cursor: DBAPICursor

从连接获取的 DB-API 游标

attribute dialect: Dialect

创建此执行上下文的方言。

attribute engine: Engine

与连接关联的引擎

attribute execute_style: ExecuteStyle = 0

将用于执行语句的 DBAPI 游标方法的风格。

新版本 2.0 中新增。

attribute executemany: bool

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

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

attribute execution_options: _ExecuteOptions = {}

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

method fetchall_for_returning(cursor)

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

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

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

新版本 2.0.10 中新增。

method 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 属性更多的功能。

另请参阅

DefaultExecutionContext.current_parameters

上下文敏感的默认函数

method get_lastrowid()

在 INSERT 之后返回 self.cursor.lastrowid 或其等价值。

这可能涉及调用特殊的游标函数,在游标上发出新的 SELECT(或新的 SELECT),或者返回在 post_exec() 内计算的存储值。

该函数仅对支持“隐式”主键生成的方言调用,并且保持 preexecute_autoincrement_sequences 设置为 False,并且没有将显式 id 值绑定到语句时才会被调用。

对于那些使用 lastrowid 概念的方言,此函数在需要返回最后插入的主键的 INSERT 语句中被调用一次。在这些情况下,它会在 ExecutionContext.post_exec() 之后直接被调用。

method get_out_parameter_values(names)

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

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

为每个绑定参数呈现的名称列表传递给该方法。然后,该方法应返回与参数对象列表对应的值序列。与以前的 SQLAlchemy 版本不同,这些值可以是来自 DBAPI 的原始值;执行上下文将根据 self.compiled.binds 中的内容应用适当的类型处理程序并更新值。处理后的字典将通过结果对象上的.out_parameters集合提供。请注意,SQLAlchemy 1.4 作为 2.0 过渡的一部分具有多种结果对象。

版本 1.4 中新增:- 添加ExecutionContext.get_out_parameter_values(),当存在具有.isoutparam标志的BindParameter对象时,将自动由DefaultExecutionContext调用。这取代了在现在已删除的get_result_proxy()方法中设置输出参数的做法。

method get_result_processor(type_, colname, coltype)

为游标描述中存在的给定类型返回一个‘结果处理器’。

这有一个默认实现,方言可以为上下文敏感的结果类型处理覆盖。

method handle_dbapi_exception(e)

接收在执��、结果获取等过程中发生的 DBAPI 异常。

attribute invoked_statement: Executable | None = None

最初给定的可执行语句对象。

结构上等同于 compiled.statement,但在缓存场景中,编译形式可能不是同一个对象。

attribute isinsert: bool = False

如果语句是一个 INSERT,则返回 True。

attribute isupdate: bool = False

如果语句是一个 UPDATE,则返回 True。

method lastrow_has_defaults()

如果最后一个 INSERT 或 UPDATE 行包含内联或数据库端默认值,则返回 True。

attribute no_parameters: bool

如果执行方式不使用参数,则返回 True。

attribute parameters: _DBAPIMultiExecuteParams

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

这些始终被存储为参数条目的列表。单个元素列表对应于cursor.execute()调用,多个元素列表对应于cursor.executemany(),除非在ExecuteStyle.INSERTMANYVALUES的情况下将使用一个或多个cursor.execute()

method post_exec()

在编译语句执行后调用。

如果已编译的语句被传递给此 ExecutionContext,则在此方法完成后应该可以使用 last_insert_ids、last_inserted_params 等数据成员。

attribute postfetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

列表,其中包含为其触发了服务器端默认值或内联 SQL 表达式值的 Column 对象。适用于插入和更新。

method pre_exec()

在编译语句执行前调用。

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

attribute prefetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

一个 Column 对象列表,其中为其触发了客户端默认值。适用于插入和更新。

attribute root_connection: Connection

是此 ExecutionContext 的源的 Connection 对象。

class sqlalchemy.engine.ExecutionContext

成员

compiled, connection, create_cursor(), cursor, dialect, engine, execute_style, executemany, execution_options, fetchall_for_returning(), fire_sequence(), get_out_parameter_values(), get_rowcount(), handle_dbapi_exception(), invoked_statement, isinsert, isupdate, lastrow_has_defaults(), no_parameters, parameters, post_exec(), postfetch_cols, pre_exec(), prefetch_cols, root_connection, statement

与单个执行对应的 Dialect 的信使对象。

attribute compiled: Compiled | None

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

attribute connection: Connection

连接对象,可由默认值生成器自由使用以执行 SQL。此连接应引用与 root_connection 相同的基础连接/事务资源。

method create_cursor() → DBAPICursor

从此 ExecutionContext 的连接生成新游标。

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

attribute cursor: DBAPICursor

从连接获取的 DB-API 游标

attribute dialect: Dialect

创建此 ExecutionContext 的方言。

attribute engine: Engine

与 Connection 关联的引擎

attribute execute_style: ExecuteStyle

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

版本 2.0 中的新功能。

attribute executemany: bool

如果上下文具有超过一个参数集的列表,则为 True。

历史上,此属性与是否将使用 cursor.execute()cursor.executemany() 相关联。现在它也可能意味着“insertmanyvalues”可能被使用,这表明一个或多个 cursor.execute() 调用。

attribute execution_options: _ExecuteOptions

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

method fetchall_for_returning(cursor: DBAPICursor) → Sequence[Any]

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

这是特定于方言的钩子,用于在调用“RETURNING”语句的交付行时具有特殊考虑因素的方言。默认实现是 cursor.fetchall()

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

版本 2.0.10 中的新功能。

method fire_sequence(seq: Sequence_SchemaItem, type_: Integer) → int

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

method get_out_parameter_values(out_param_names: Sequence[str]) → Sequence[Any]

从游标返回一系列 OUT 参数值。

对于支持 OUT 参数的方言,当存在具有设置了 SQLCompiler 对象的 SQLCompiler.has_out_parameters 标志的 SQLCompiler 对象时,将调用此方法。反过来,如果语句本身具有 .isoutparam 标志设置的 BindParameter 对象,并且这些对象由 SQLCompiler.visit_bindparam() 方法消耗,则将设置此标志为 True。如果方言编译器生成具有 .isoutparam 设置的 BindParameter 对象,并且不由 SQLCompiler.visit_bindparam() 处理,则应显式设置此标志。

将每个绑定参数的渲染名称列表传递给该方法。然后该方法应返回与参数对象列表对应的值序列。与之前的 SQLAlchemy 版本不同,这些值可以是来自 DBAPI 的原始值;执行上下文将根据 self.compiled.binds 中存在的内容应用适当的类型处理程序,并更新这些值。然后处理后的字典将通过结果对象上的.out_parameters集合提供。请注意,SQLAlchemy 1.4 在 2.0 过渡的一部分中有多种结果对象。

新版本 1.4 中新增:- 添加了 ExecutionContext.get_out_parameter_values(),当存在设置了.isoutparam标志的 BindParameter 对象时,将自动调用该方法。这取代了在现已删除的get_result_proxy()方法中设置输出参数的做法。

method get_rowcount() → int | None

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

有关此内容的详细信息,请参阅 CursorResult.rowcount

method handle_dbapi_exception(e: BaseException) → None

接收在执行、结果获取等过程中发生的 DBAPI 异常。

attribute invoked_statement: Executable | None

首次给定的可执行语句对象。

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

attribute isinsert: bool

如果语句是 INSERT,则返回 True。

attribute isupdate: bool

如果语句是 UPDATE,则返回 True。

method lastrow_has_defaults() → bool

如果最后一个 INSERT 或 UPDATE 行包含内联或数据库端默认值,则返回 True。

attribute no_parameters: bool

如果执行样式不使用参数,则返回 True。

attribute parameters: _AnyMultiExecuteParams

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

这些始终存储为参数条目的列表。单个元素列表对应于 cursor.execute() 调用,多个元素列表对应于 cursor.executemany(),除了在使用 ExecuteStyle.INSERTMANYVALUES 的情况下,它将一次或多次使用 cursor.execute()

method post_exec() → None

在编译语句执行后调用。

如果已将编译的语句传递给此执行上下文,则在此方法完成后,last_insert_ids、last_inserted_params 等数据成员应该可用。

attribute postfetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

一组列对象,为其触发了服务器端默认值或内联 SQL 表达式值。适用于插入和更新操作。

method pre_exec() → None

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

如果已将编译的语句传递给此执行上下文,则在此语句完成后,必须初始化语句和参数数据成员。

attribute prefetch_cols: util.generic_fn_descriptor[Sequence[Column[Any]] | None]

为客户端端触发了默认值的 Column 对象列表。适用于插入和更新。

attribute root_connection: Connection

是此 ExecutionContext 来源的 Connection 对象。

attribute statement: str

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

class sqlalchemy.sql.compiler.ExpandedState


SqlAlchemy 2.0 中文文档(四十七)(9)https://developer.aliyun.com/article/1563056

相关文章
|
4月前
|
SQL 关系型数据库 API
SqlAlchemy 2.0 中文文档(五十四)(5)
SqlAlchemy 2.0 中文文档(五十四)
46 1
|
4月前
|
SQL 关系型数据库 测试技术
SqlAlchemy 2.0 中文文档(五十四)(4)
SqlAlchemy 2.0 中文文档(五十四)
39 1
|
4月前
|
SQL 缓存 关系型数据库
SqlAlchemy 2.0 中文文档(五十四)(3)
SqlAlchemy 2.0 中文文档(五十四)
30 1
|
4月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(四十九)(4)
SqlAlchemy 2.0 中文文档(四十九)
37 1
|
4月前
|
SQL 关系型数据库 API
SqlAlchemy 2.0 中文文档(四十七)(2)
SqlAlchemy 2.0 中文文档(四十七)
73 0
|
4月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(四十七)(1)
SqlAlchemy 2.0 中文文档(四十七)
42 0
|
4月前
|
SQL 缓存 关系型数据库
SqlAlchemy 2.0 中文文档(四十七)(6)
SqlAlchemy 2.0 中文文档(四十七)
34 0
|
4月前
|
SQL 存储 编译器
SqlAlchemy 2.0 中文文档(四十七)(4)
SqlAlchemy 2.0 中文文档(四十七)
30 0
|
4月前
|
SQL API 数据库
SqlAlchemy 2.0 中文文档(四十七)(5)
SqlAlchemy 2.0 中文文档(四十七)
26 0
|
4月前
|
SQL 关系型数据库 MySQL
SqlAlchemy 2.0 中文文档(四十七)(9)
SqlAlchemy 2.0 中文文档(四十七)
47 0