sqlalchemy.sql.schema.Table都有哪些方法可用
🤖 Assistant
使用 表 = Base.metadata.tables.get(表名) ,后进行表操作 session.execute(表.insert(), data)。
如果打印print(type(表)) , 就会得到 <class 'sqlalchemy.sql.schema.Table'>
以下是关于 SQLAlchemy 中 sqlalchemy.sql.schema.Table 类的全部方法及其作用的详细说明。
1. add_is_dependent_on(table)
- 作用:声明该表依赖于另一个表。用于在数据库迁移时控制表创建/删除的顺序。
- 场景:当表 A 的外键引用表 B 时,表 B 需要在表 A 之前创建。
2. alias(name=None, flat=False)
- 作用:创建表的别名(SQL
AS子句)。用于在同一查询中多次引用同一个表。 - 参数:
name:别名名称flat:是否简化嵌套查询(优化生成 SQL)
3. allows_lambda
- 作用:检查是否支持 Lambda 表达式(SQLAlchemy 1.4+)。
- 场景:为启用 Lambda 语法(
lambda: column == value)提供兼容性支持。
4. append_column(column)
- 作用:动态添加列到表中(通常在表初始化后补充列)。
- 示例:
table.append_column(Column('new_col', Integer))
5. append_constraint(constraint)
- 作用:动态添加约束(如
PrimaryKeyConstraint,ForeignKeyConstraint)。 - 示例:添加唯一约束
table.append_constraint(UniqueConstraint('col1', 'col2'))
6. argument_for(dialect, argument, value)
- 作用:为特定数据库方言设置自定义参数。
- 示例:为 MySQL 设置引擎类型:
table.argument_for('mysql', 'engine', 'InnoDB')
**7. bind
- 作用:
@property装饰的 getter/setter,获取或设置表绑定的数据库引擎(Engine对象)。 - 等价于 ORM:
session.bind
**8. c
- 作用:列的命名空间(
ColumnCollection),允许通过table.c.column_name访问列。 - 示例:
select(table.c.id, table.c.name)
**9. columns
- 作用:返回所有列的
ColumnCollection对象(类似字典结构)。 - 对比
c:与c等价,是更完整的列集合容器。
**10. comment
- 作用:表注释(SQL
COMMENT ON TABLE),在 DDL 中生成注释语句。 - 用途:数据库文档化和元数据管理。
11. compare(other, **kw)
- 作用:比较两个表结构是否相同(用于迁移工具如 Alembic)。
- 返回:差异列表或
None(相同)。
12. compile(bind=None, **kw)
- 作用:编译表结构为 SQL DDL 语句(如
CREATE TABLE)。 - 参数:
bind指定数据库方言(自动推断 SQL 语法)。
**13. constraints
- 作用:返回所有表级约束的集合(主键、唯一、检查等)。
- 包含:
PrimaryKeyConstraint,UniqueConstraint等对象。
14. corresponding_column(column, require_embedded=False)
- 作用:根据列名找到当前表中对应的列(用于关联查询)。
- 场景:在 JOIN 操作中匹配跨表的列。
15. create(bind=None, checkfirst=True)
- 作用:在数据库中创建该表。
- 参数:
checkfirst:若为True,仅当表不存在时创建。- 等价方法:
metadata.create_all()的底层实现。
16. create_drop_stringify_dialect()
- 作用:内部方法,生成用于表创建/删除的方言配置(高级定制)。
17. delete()
- 作用:生成针对该表的
DELETE语句。 - 示例:
table.delete().where(table.c.id == 5)
18. description
- 作用:表的描述信息(自定义元数据),类似
comment但非 SQL 标准。
19. dialect_kwargs 与 dialect_options
- 作用:存储方言特定参数的容器(如
mysql_engine='InnoDB')。 - 区别:
dialect_kwargs:键为方言名前缀(mysql_xxx)dialect_options:键为无前缀的纯名称(engine)
20. dispatch
- 作用:事件分发器(继承自
sqlalchemy.event.Dispatch),用于处理事件监听。 - 场景:自定义表的 DDL 事件(如
before_create)。
21. drop(bind=None, checkfirst=True)
- 作用:从数据库中删除该表。
- 参数:
checkfirst=True时仅当表存在才删除。
22. entity_namespace
- 作用:返回表的列命名空间(与
c属性等价)。
23. exists()
- 作用:生成检查表是否存在的 SQL 表达式(
SELECT EXISTS(...))。 - 用途:条件性操作(如仅当表存在时删除)。
24. exported_columns
- 作用:所有列的集合(与
columns相同,用于兼容旧版本)。
25. foreign_key_constraints
- 作用:返回该表的所有外键约束对象。
- 对比:
foreign_keys返回列级外键,此方法返回表级约束。
26. foreign_keys
- 作用:返回该表的所有外键列集合。
- 示例:获取关联列
table.foreign_keys
27. fullname
- 作用:返回完整表名(含模式名),如
"public.users"。
28. get_children(**kwargs)
- 作用:返回表的所有子元素(列、约束等),用于遍历表结构。
- 继承:继承自 SQL 抽象树的
ClauseElement。
29. implicit_returning
- 作用:控制 INSERT 操作是否使用 RETURNING 子句(某些数据库如 PostgreSQL 支持)。
30. indexes
- 作用:返回该表的所有索引对象集合。
- 扩展:可通过
table.append_index(Index(...))动态添加。
31. info
- 作用:自定义信息字典(存储任何 Python 对象)。
- 用途:开发者自由扩展表元数据。
32. inherit_cache
- 作用:指示是否参与 SQL 编译缓存(性能优化,默认
True)。
33. insert()
- 作用:生成
INSERT语句。 - 示例:
table.insert().values(name="Alice")
34. is_clause_element 与 is_selectable
- 作用:标识对象的类型:
is_clause_element=True:表示是 SQL 表达式组件。is_selectable=True:表示可作为 SELECT 的 FROM 子句。
35. is_derived_from(fromclause)
- 作用:检查表是否从另一个 FROM 子句派生(用于关联查询优化)。
36. join(right, *args, **kwargs)
- 作用:生成两表的 INNER JOIN 表达式。
- 参数:
right为右表,可指定 ON 条件。
37. key
- 作用:ORM 中使用的表标识符(通常与
name相同,可自定义)。 - 用途:解决表名冲突(如多表继承)。
38. kwargs
- 已废弃:旧版本中存储关键字参数的容器,不建议使用。
39. lateral()
- 作用:将表标记为 LATERAL(生成
LATERAL子查询)。 - 场景:在 FROM 子句中引用其他表的列(PostgreSQL 特性)。
40. memoized_attribute 与 memoized_instancemethod
- 作用:缓存属性或方法结果的装饰器(性能优化,内部使用)。
41. metadata
- 作用:返回该表所属的
MetaData对象(表的注册中心)。
42. name
- 作用:表名(不含模式名)。
43. named_with_column
- 作用:内部方法,处理列名冲突(高级 ORM 映射场景)。
44. outerjoin(right, *args, **kwargs)
- 作用:生成两表的 OUTER JOIN 表达式。
45. params
- 作用:动态绑定 SQL 参数,用于 DML 语句(
insert/update)。 - 示例:
table.update().params(status="active").where(...)
46. primary_key
- 作用:返回表的主键约束对象(
PrimaryKeyConstraint)。
47. replace_selectable(old, alias)
- 作用:将 SELECT 语句中的表引用替换为别名(查询优化内部使用)。
48. schema
- 作用:返回表的模式名(如
"public")。可为None。
49. select()
- 作用:生成针对该表的
SELECT查询。 - 等价于:
sqlalchemy.select(table)
50. selectable
- 作用:返回可被 SELECT 的对象(通常是
FromClause自身)。
51. self_group(against=None)
- 作用:将表包装成子查询(当被用在表达式中时自动调用)。
52. stringify_dialect
- 作用:控制 SQL 编译时的字符串化行为(调试用)。
53. supports_execution
- 作用:标记对象是否支持直接执行(表返回
False,而查询返回True)。
54. table_valued()
- 作用:创建行集返回函数(类似 PostgreSQL 的
generate_series)。 - 场景:在 FROM 子句中使用函数生成临时表。
55. tablesample(sampling, seed=None)
- 作用:生成
TABLESAMPLE子句(随机抽样查询)。 - 支持数据库:PostgreSQL, SQL Server 等。
56. to_metadata(metadata, schema=None) 与 tometadata(...)
- 作用:复制表到新的
MetaData实例(tometadata是旧版别名)。 - 用途:多数据库配置或项目模块化。
57. unique_params(*args, **kwargs)
- 作用:为查询生成唯一参数名(避免 SQL 注入)。
58. update()
- 作用:生成
UPDATE语句。 - 示例:
table.update().where(table.c.id==5).values(name="Bob")
59. uses_inspection
- 作用:是否使用 SQL 检查器(
InspectionAttr接口),ORM 内部特性。
关键总结:
- DDL 操作:
create,drop,compile - DML 操作:
select,insert,update,delete - 结构操作:
append_column,append_constraint - 查询辅助:
alias,join,lateral - 元数据管理:
metadata,info,schema - 高级功能:
table_valued,tablesample,corresponding_column
这些方法共同构成 SQLAlchemy 表操作的核心 API,覆盖从基础 CRUD 到高级元数据管理的全部场景。
浙公网安备 33010602011771号