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

使用pypyodbc是否可读取MS Access数据库中各数据表间的关联关系

pypyodbc读取MS Access数据表关联关系说明

可以,pypyodbc完全支持读取MS Access数据库中多张表之间的关联(外键约束)关系,有两种常用实现方式:


方法1:使用pypyodbc内置foreignKeys()方法(推荐)

这是最简便的方式,不需要额外查询系统表,调用游标对象的内置方法即可直接返回所有外键关联信息。
示例代码如下:

import pypyodbc

# 连接Access数据库,连接字符串根据你的文件路径、版本调整
conn_str = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\path\to\your\database.accdb;'
conn = pypyodbc.connect(conn_str)
cursor = conn.cursor()

# 不传参数时返回所有表的外键关联关系
all_relations = cursor.foreignKeys().fetchall()

# 也可以指定查询单个表的关联关系,比如查询名为order的表的外键
# order_relations = cursor.foreignKeys(table='order').fetchall()

# 关键返回字段说明
for rel in all_relations:
    print(f"父表(主键所在表):{rel.PKTABLE_NAME}")
    print(f"父表关联字段:{rel.PKCOLUMN_NAME}")
    print(f"子表(外键所在表):{rel.FKTABLE_NAME}")
    print(f"子表关联字段:{rel.FKCOLUMN_NAME}")
    print(f"外键约束名:{rel.FK_NAME}")
    print("---")

cursor.close()
conn.close()

方法2:查询Access系统表MSysRelationships

如果你需要获取关联关系的更多属性(比如级联更新、级联删除规则),可以直接查询Access内置的系统表:

# 连接数据库后执行查询
cursor.execute("SELECT szReferencedObject, szObject, szColumn, szReferencedColumn, grbit FROM MSysRelationships")
sys_relations = cursor.fetchall()

for rel in sys_relations:
    print(f"被关联表:{rel[0]}")
    print(f"关联表:{rel[1]}")
    print(f"关联字段:{rel[2]}")
    print(f"被关联字段:{rel[3]}")
    # grbit字段存储关联规则,比如1代表级联更新,2代表级联删除
    print(f"关联规则编码:{rel[4]}")

注意:默认状态下MSysRelationships表没有读取权限,你需要先打开Access数据库,在选项中开启系统表可见,然后给当前用户授予该表的读取权限,才能正常查询。


注意事项

  • 确保你的pypyodbc运行环境(32位/64位)和安装的Access ODBC驱动版本一致,否则会出现连接失败问题
  • 如果数据库设置了加密,需要在连接字符串中补充PWD=你的数据库密码参数,才能正常读取关联信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:02