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 对象)。
  • 等价于 ORMsession.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_kwargsdialect_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_elementis_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_attributememoized_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 到高级元数据管理的全部场景。

posted on 2025-08-20 18:22  痴心妄想  阅读(22)  评论(0)    收藏  举报

导航