使用pandas_access连接Microsoft Access数据库时遭遇WinError 2文件未找到错误求助
解决
[WinError 2] The system cannot find the file specified问题(pandas_access连接Access数据库) 我一眼就看穿问题所在了——pandas_access这个库本质上是通过调用mdb-tools工具集里的mdb-tables命令行程序来读取Access数据库的,但你的Windows系统里并没有安装这个工具,所以Python的subprocess模块找不到对应的可执行文件,才会抛出这个错误。
下面给你两种有效的解决方案,按需选择:
方案一:安装mdb-tools并配置环境变量
mdb-tools是原本为Linux开发的Access数据库处理工具,Windows需要使用第三方编译的版本:
- 如果你用Chocolatey包管理器(推荐),直接打开管理员权限的命令提示符,运行:
choco install mdbtools - 如果你不想用包管理器,可以下载第三方编译好的mdb-tools二进制文件,解压后把包含
mdb-tables.exe的bin目录添加到系统的PATH环境变量中。
安装完成后,打开新的命令提示符,输入mdb-tables,如果能看到工具的帮助信息,说明配置成功,此时再运行你的原代码就不会报错了。
方案二:用pyodbc直接连接(更稳定的Windows方案)
既然你已经导入了pyodbc,不如直接用它来连接Access数据库,这种方式不需要依赖外部命令行工具,适配性更好:
import pyodbc import pandas as pd def access_db_to_dataframe(db_path): # 根据数据库版本选择驱动,.accdb用这个,.mdb也兼容 conn_string = ( r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};' r'DBQ=' + db_path + ';' ) try: # 建立连接 conn = pyodbc.connect(conn_string) # 获取所有用户表(过滤掉系统表) cursor = conn.cursor() tables = [tbl.table_name for tbl in cursor.tables(tableType='TABLE')] print(f"数据库中的表:{tables}") # 读取第一个表到DataFrame(你可以替换成指定表名) if tables: df = pd.read_sql(f"SELECT * FROM {tables[0]}", conn) return df else: print("数据库中没有用户表") return None except Exception as e: print(f"连接出错:{str(e)}") return None finally: if 'conn' in locals(): conn.close() # 测试调用你的数据库路径 rig_data = r'C:/Users/e211816/OneDrive - WFT/Desktop/Kvitebjørn FF Calibration/Data/xyz.accdb' icon_data = 'C:/Users/e211816/OneDrive - WFT/Desktop/Kvitebjørn FF Calibration/Data/icon.mdb' # 读取rig_data数据库 df_rig = access_db_to_dataframe(rig_data) if df_rig is not None: print(df_rig.head()) # 读取icon_data数据库 df_icon = access_db_to_dataframe(icon_data) if df_icon is not None: print(df_icon.head())
额外注意事项
如果运行pyodbc代码时提示找不到驱动,需要安装Microsoft Access Database Engine 2016 Redistributable,注意要和你的Python位数一致(32位Python装32位引擎,64位对应64位),否则会出现驱动不兼容的问题。
内容的提问来源于stack exchange,提问作者dkrol
相关产品推荐
相关产品推荐

