SqlAlchemy 2.0 中文文档(三十九)(3)https://developer.aliyun.com/article/1562611
使用检查员进行细粒度反射
也提供了低级接口,它提供了一个与后端无关的系统,用于从给定数据库加载模式、表、列和约束描述的列表。这被称为“检查员”:
from sqlalchemy import create_engine from sqlalchemy import inspect engine = create_engine("...") insp = inspect(engine) print(insp.get_table_names())
对象名称 | 描述 |
检查员 | 执行数据库模式检查。 |
ReflectedCheckConstraint | 表示反射元素的字典,对应于CheckConstraint 。 |
ReflectedColumn | 表示反射元素的字典,对应于Column 对象。 |
ReflectedComputed | 表示计算列的反射元素,对应于Computed 构造。 |
ReflectedForeignKeyConstraint | 表示反射元素的字典,对应于ForeignKeyConstraint 。 |
ReflectedIdentity | 表示列的反射身份结构,对应于Identity 构造。 |
ReflectedIndex | 表示反射元素的字典,对应于Index 。 |
反射主键约束 | 表示对应于PrimaryKeyConstraint 的反射元素的字典。 |
反射表注释 | 表示对应于Table.comment 属性的反射注释的字典。 |
反射唯一约束 | 表示对应于UniqueConstraint 的反射元素的字典。 |
class sqlalchemy.engine.reflection.Inspector
执行数据库模式检查。
Inspector 充当Dialect
的反射方法的代理,提供一致的接口以及对先前获取的元数据的缓存支持。
通常通过inspect()
函数创建Inspector
对象,可以传递一个Engine
或一个Connection
:
from sqlalchemy import inspect, create_engine engine = create_engine('...') insp = inspect(engine)
在上述情况下,与引擎相关联的Dialect
可能选择返回一个提供了特定于该方言目标数据库的附加方法的Inspector
子类。
成员
init(), bind, clear_cache(), default_schema_name, dialect, engine, from_engine(), get_check_constraints(), get_columns(), get_foreign_keys(), get_indexes(), 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_sorted_table_and_fkc_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(), info_cache, reflect_table(), sort_tables_on_foreign_key_dependency()
类签名
类sqlalchemy.engine.reflection.Inspector
(sqlalchemy.inspection.Inspectable
)
method __init__(bind: Engine | Connection)
初始化一个新的Inspector
。
自版本 1.4 弃用:Inspector
上的 init() 方法已弃用,并将在将来的版本中移除。请使用 Engine
或 Connection
上的 inspect()
函数以获取 Inspector
。
参数:
bind – 一个Connection
,通常是Engine
或Connection
的实例。
对于特定于方言的 Inspector
实例,请参阅 Inspector.from_engine()
。
attribute bind: Engine | Connection
method clear_cache() → None
重置此Inspector
的缓存。
当检查方法有缓存数据时,在下次调用以获取新数据时会发出 SQL 查询。
从版本 2.0 开始。
attribute default_schema_name
返回当前引擎的数据库用户的方言提供的默认模式名称。
例如,对于 PostgreSQL 通常是 public
,对于 SQL Server 是 dbo
。
attribute dialect: Dialect
attribute engine: Engine
classmethod from_engine(bind: Engine) → Inspector
从给定的引擎或连接构造一个新的特定于方言的 Inspector 对象。
自版本 1.4 弃用:Inspector
上的 from_engine() 方法已弃用,并将在将来的版本中移除。请使用 Engine
或 Connection
上的 inspect()
函数以获取 Inspector
。
参数:
bind – 一个Connection
或者Engine
。
该方法与直接构造函数调用Inspector
不同,在此,Dialect
有机会提供特定于方言的Inspector
实例,该实例可能提供附加方法。
请参阅Inspector
的示例。
method get_check_constraints(table_name: str, schema: str | None = None, **kw: Any) → List[ReflectedCheckConstraint]
返回table_name
中的检查约束信息。
给定字符串table_name
和可选字符串模式,将检查约束信息作为ReflectedCheckConstraint
列表返回。
参数:
table_name
– 表的字符串名称。对于特殊引用,请使用quoted_name
。schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。**kw
– 要传递给特定方言实现的附加关键字参数。有关更多信息,请参阅使用中的方言的文档。
返回:
字典列表,每个表示检查约束的定义。
另请参阅
Inspector.get_multi_check_constraints()
method get_columns(table_name: str, schema: str | None = None, **kw: Any) → List[ReflectedColumn]
返回table_name
中的列信息。
给定字符串table_name
和可选字符串schema
,将列信息作为ReflectedColumn
列表返回。
参数:
table_name
– 表的字符串名称。对于特殊引用,请使用quoted_name
。schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。**kw
– 要传递给特定方言实现的附加关键字参数。有关更多信息,请参阅使用中的方言的文档。
返回:
字典列表,每个表示数据库列的定义。
另请参阅
Inspector.get_multi_columns()
。
method get_foreign_keys(table_name: str, schema: str | None = None, **kw: Any) → List[ReflectedForeignKeyConstraint]
返回table_name
中的外键信息。
给定字符串table_name
,以及可选的字符串模式,将外键信息作为ReflectedForeignKeyConstraint
的列表返回。
参数:
table_name
– 表格的字符串名称。对于特殊引用,请使用quoted_name
。schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。**kw
– 附加的关键字参数,传递给特定方言的实现。有关更多信息,请参阅正在使用的方言的文档。
返回:
一个字典列表,每个字典表示一个外键定义。
另请参阅
Inspector.get_multi_foreign_keys()
method get_indexes(table_name: str, schema: str | None = None, **kw: Any) → List[ReflectedIndex]
返回有关table_name
中索引的信息。
给定字符串table_name
和可选的字符串模式,将索引信息作为ReflectedIndex
的列表返回。
参数:
table_name
– 表格的字符串名称。对于特殊引用,请使用quoted_name
。schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。**kw
– 附加的关键字参数,传递给特定方言的实现。有关更多信息,请参阅正在使用的方言的文档。
返回:
一个字典列表,每个字典表示一个索引的定义。
另请参阅
Inspector.get_multi_indexes()
method get_materialized_view_names(schema: str | None = None, **kw: Any) → List[str]
返回模式中的所有物化视图名称。
参数:
schema
– 可选,从非默认模式中检索名称。对于特殊引用,请使用quoted_name
。**kw
– 附加的关键字参数,传递给特定方言的实现。有关更多信息,请参阅正在使用的方言的文档。
版本 2.0 中的新功能。
另请参阅
Inspector.get_view_names()
method get_multi_check_constraints(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, List[ReflectedCheckConstraint]]
返回给定模式中所有表格中检查约束的信息。
可以通过将要使用的名称传递给filter_names
来过滤表格。
对于每个表,值是ReflectedCheckConstraint
的列表。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。filter_names
– 可选地仅返回此处列出的对象的信息。kind
– 指定要反映的对象类型的ObjectKind
。默认为ObjectKind.TABLE
。scope
– 指定应反映默认、临时或任何表的约束的ObjectScope
。默认为ObjectScope.DEFAULT
。**kw
– 传递给特定方言实现的额外关键字参数。有关更多信息,请参阅正在使用的方言的文档。
返回:
一个字典,其中键是两元组模式、表名,值是字典列表,每个表示检查约束的定义。如果未提供模式,则模式为None
。
新版本 2.0 中新增。
另请参阅
Inspector.get_check_constraints()
method get_multi_columns(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, List[ReflectedColumn]]
返回给定模式中所有对象中列的信息。
可通过将要用于filter_names
的名称传递来过滤对象。
对于每个表,值是ReflectedColumn
的列表。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。filter_names
– 可选地仅返回此处列出的对象的信息。kind
– 指定要反映的对象类型的ObjectKind
。默认为ObjectKind.TABLE
。scope
– 指定应反映默认、临时或任何表的列的ObjectScope
。默认为ObjectScope.DEFAULT
。**kw
– 传递给特定方言实现的额外关键字参数。有关更多信息,请参阅正在使用的方言的文档。
返回:
一个字典,其中键是两元组模式、表名,值是字典列表,每个表示数据库列的定义。如果未提供模式,则模式为None
。
新版本 2.0 中新增。
另请参阅
Inspector.get_columns()
method get_multi_foreign_keys(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, List[ReflectedForeignKeyConstraint]]
返回给定模式中所有表中外键的信息。
可通过将要用于filter_names
的名称传递来过滤表。
对于每个表,值是一个 ReflectedForeignKeyConstraint
列表。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。要进行特殊引用,请使用quoted_name
。filter_names
– 可选择仅返回此处列出的对象的信息。kind
– 一个指定要反射的对象类型的ObjectKind
。默认为ObjectKind.TABLE
。scope
– 一个指定要反射的默认、临时或任何表的外键的ObjectScope
。默认为ObjectScope.DEFAULT
。**kw
– 传递给特定方言实现的额外关键字参数。有关更多信息,请参阅正在使用的方言的文档。
返回:
一个字典,其中键是二元组模式、表名,值是字典列表,每个表示外键定义。如果未提供模式,则模式为 None
。
新版本 2.0 中新增。
另请参阅
Inspector.get_foreign_keys()
method get_multi_indexes(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, List[ReflectedIndex]]
返回给定模式中所有对象中的索引的信息。
可通过将名称传递给 filter_names
来过滤对象。
对于每个表,值是一个 ReflectedIndex
列表。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。要进行特殊引用,请使用quoted_name
。filter_names
– 可选择仅返回此处列出的对象的信息。kind
– 一个指定要反射的对象类型的ObjectKind
。默认为ObjectKind.TABLE
。scope
– 一个指定要反射的默认、临时或任何表的索引的ObjectScope
。默认为ObjectScope.DEFAULT
。**kw
– 传递给特定方言实现的额外关键字参数。有关更多信息,请参阅正在使用的方言的文档。
返回:
一个字典,其中键是二元组模式、表名,值是字典列表,每个表示索引的定义。如果未提供模式,则模式为 None
。
新版本 2.0 中新增。
另请参阅
Inspector.get_indexes()
method get_multi_pk_constraint(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, ReflectedPrimaryKeyConstraint]
返回给定模式中所有表中主键约束的信息。
可通过将名称传递给 filter_names
来过滤表。
对于每个表,值是 ReflectedPrimaryKeyConstraint
。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。要进行特殊引用,请使用quoted_name
。filter_names
– 可选地仅返回此处列出的对象的信息。kind
– 一个ObjectKind
,指定要反映的对象类型。默认为ObjectKind.TABLE
。scope
– 一个ObjectScope
,指定应反映默认、临时或任何表的主键。默认为ObjectScope.DEFAULT
。**kw
– 传递给方言特定实现的额外关键字参数。有关更多信息,请参阅所使用的方言的文档。
返回:
一个字典,其中键是二元组 schema,table-name,值是字典,每个表示主键约束的定义。如果未提供模式,则模式为 None
。
2.0 版新功能。
另请参阅
Inspector.get_pk_constraint()
method get_multi_table_comment(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, ReflectedTableComment]
返回给定模式中所有对象的表注释信息。
可通过将要使用的名称传递给 filter_names
进行过滤对象。
对于每个表,值是 ReflectedTableComment
。
对于不支持注释的方言,引发 NotImplementedError
异常。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。要进行特殊引用,请使用quoted_name
。filter_names
– 可选地仅返回此处列出的对象的信息。kind
– 一个ObjectKind
,指定要反映的对象类型。默认为ObjectKind.TABLE
。scope
– 一个ObjectScope
,指定应反映默认、临时或任何表的注释。默认为ObjectScope.DEFAULT
。**kw
– 传递给方言特定实现的额外关键字参数。有关更多信息,请参阅所使用的方言的文档。
返回:
一个字典,其中键是二元组 schema,table-name,值是字典,表示表注释。如果未提供模式,则模式为 None
。
2.0 版新功能。
另请参阅
Inspector.get_table_comment()
method get_multi_table_options(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, Dict[str, Any]]
返回指定模式中的表创建时指定的选项的字典。
表格可以通过将要使用的名称传递给 filter_names
进行过滤。
目前包括一些适用于 MySQL 和 Oracle 表的选项。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。filter_names
– 可选择仅返回此处列出的对象的信息。kind
– 一个ObjectKind
,指定要反映的对象类型。默认为ObjectKind.TABLE
。scope
– 一个ObjectScope
,指定应该反映哪些选项的范围,默认为ObjectScope.DEFAULT
。**kw
– 传递给方言特定实现的附加关键字参数。有关更多信息,请参阅所使用方言的文档。
返回值:
一个字典,其中键是两元组 schema,table-name,值是具有表选项的字典。每个字典中返回的键取决于所使用的方言。每个键都以方言名称为前缀。如果未提供模式,则模式为None
。
新版本功能 2.0。
另请参阅
Inspector.get_table_options()
method get_multi_unique_constraints(schema: str | None = None, filter_names: Sequence[str] | None = None, kind: ObjectKind = ObjectKind.TABLE, scope: ObjectScope = ObjectScope.DEFAULT, **kw: Any) → Dict[TableKey, List[ReflectedUniqueConstraint]]
返回有关给定模式中所有表的唯一约束的信息。
表格可以通过将要使用的名称传递给filter_names
来进行过滤。
对于每个表,值是一个ReflectedUniqueConstraint
的列表。
参数:
schema
– 字符串模式名称;如果省略,则使用数据库连接的默认模式。对于特殊引用,请使用quoted_name
。filter_names
– 可选择仅返回此处列出的对象的信息。kind
– 一个ObjectKind
,指定要反映的对象类型。默认为ObjectKind.TABLE
。scope
– 一个ObjectScope
,指定应该反映哪些约束的范围,默认为ObjectScope.DEFAULT
。**kw
– 传递给方言特定实现的附加关键字参数。有关更多信息,请参阅所使用方言的文档。
返回值:
一个字典,其中键是两元组 schema,table-name,值是表示唯一约束定义的字典列表。如果未提供模式,则模式为None
。
新版本功能 2.0。
另请参阅
Inspector.get_unique_constraints()
method get_pk_constraint(table_name: str, schema: str | None = None, **kw: Any) → ReflectedPrimaryKeyConstraint
返回有关table_name
中主键约束的信息。
给定字符串table_name
,以及一个可选的字符串模式,返回主键信息作为ReflectedPrimaryKeyConstraint
。
参数:
table_name
- 表的字符串名称。要进行特殊引用,请使用quoted_name
。schema
- 字符串模式名称;如果省略,则使用数据库连接的默认模式。要进行特殊引用,请使用quoted_name
。**kw
- 传递给特定方言实现的附加关键字参数。有关更多信息,请参阅正在使用的方言的文档。
返回:
一个表示主键约束定义的字典。
另请参阅
Inspector.get_multi_pk_constraint()
method get_schema_names(**kw: Any) → List[str]
返回所有模式名称。
参数:
**kw - 传递给特定方言实现的附加关键字参数。有关更多信息,请参阅正在使用的方言的文档。
method get_sequence_names(schema: str | None = None, **kw: Any) → List[str]
返回模式中所有序列名称。
参数:
schema
- 可选,从非默认模式中检索名称。要进行特殊引用,请使用quoted_name
。**kw
- 传递给特定方言实现的附加关键字参数。有关更多信息,请参阅正在使用的方言的文档。
method get_sorted_table_and_fkc_names(schema: str | None = None, **kw: Any) → List[Tuple[str | None, List[Tuple[str, str | None]]]]
返回特定模式中所引用的表和外键约束名的依赖排序。
这将产生 2 元组(tablename, [(tname, fkname), (tname, fkname), ...])
,其中包含按 CREATE 顺序分组的表名与未被检测为属于循环的外键约束名。最后一个元素将是(None, [(tname, fkname), (tname, fkname), ..])
,其中包含剩余的外键约束名,这些名字需要在事后单独进行 CREATE 步骤,基于表之间的依赖关系。
参数:
schema
- 要查询的模式名称,如果不是默认模式。**kw
- 传递给特定方言实现的附加关键字参数。有关更多信息,请参阅正在使用的方言的文档。
另请参阅
Inspector.get_table_names()
sort_tables_and_constraints()
- 与已给定的MetaData
类似的方法。
method get_table_comment(table_name: str, schema: str | None = None, **kw: Any) → ReflectedTableComment
返回关于table_name
的表注释的信息。
给定字符串 table_name
和可选字符串 schema
,将表注释信息返回为 ReflectedTableComment
。
对于不支持注释的方言,引发 NotImplementedError
。
SqlAlchemy 2.0 中文文档(三十九)(5)https://developer.aliyun.com/article/1562626