You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式获取Flask-SQLAlchemy模型定义的外键关系信息

你可以通过模型类的__table__属性获取所有元信息,外键信息就存在这个对象的属性中。你之前通过dir(m)、m.__dict__找不到对应信息,是因为这些元数据没有直接挂载在模型类的顶层属性,而是统一封装在SQLAlchemy自动生成的__table__对象里。

两种获取外键的实现方式

方式1:遍历列逐个提取外键

def get_model_defined_foreign_keys(model):
    foreign_key_list = []
    # 遍历模型定义的所有列
    for column in model.__table__.columns:
        # 单个列可能关联多个外键,所以是集合类型
        for fk in column.foreign_keys:
            foreign_key_list.append({
                "current_column": column.name,
                "target_column": fk.target_fullname, # 格式为「schema名.表名.列名」
                "constraint_name": fk.name
            })
    return foreign_key_list

调用示例:传入你定义的Example模型即可拿到所有外键信息:

fks = get_model_defined_foreign_keys(Example)

返回结果中就包含你示例里info列关联Info.id的外键记录。

方式2:直接获取整张表的外键集合

如果你不需要按列遍历,可以直接访问__table__的foreign_keys属性,拿到的是整张表所有外键的汇总集合,和方式1的结果完全一致:

all_fks = Example.__table__.foreign_keys

校验提示

你从数据库反射拿到的外键信息一般也包含「约束名、当前列、关联目标列」三个核心字段,和上面获取的模型定义信息一一比对,就能验证结构是否一致。


内容的提问来源于stack exchange,提问作者Ethan Conner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:27:01