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_insert
、insert_returning
和use_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