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

SQLAlchemy无法连接Access DSN的故障排查求助

Windows致命异常0xc0000138:读取MS Access数据库表失败排查

问题场景

每日运行的Python脚本突然失效,定位到以下代码触发Windows致命异常(错误码0xc0000138):

import pandas as pd
df_date = pd.read_sql_table('DIM Date','access+pyodbc://MyDSN')

使用的是64位MS Access数据源(MyDSN),已尝试以下操作但未解决:

  • 从第三方网站下载缺失DLL并注册
  • 新建64位Python3.10.8的conda环境,安装依赖:
    conda create --name bound2
    conda activate bound2
    conda install spyder pandas sqlalchemy pip
    pip install sqlalchemy-access
    

错误栈分析

从错误栈可以看到,异常发生在sqlalchemy_access调用win32com.client.Dispatch获取表主键约束的环节,错误码0xc0000138的核心原因是找不到指定DLL文件或DLL与当前环境(32/64位)不兼容。

排查与解决方案

1. 修复/重装官方Access驱动

  • 不要使用第三方DLL,直接安装64位Microsoft Access Database Engine:
    • 若系统安装了32位Office,需使用静默安装命令避免冲突:AccessDatabaseEngine_X64.exe /quiet
    • 安装完成后重启系统,重新测试连接

2. 验证ODBC数据源配置

  • 打开64位ODBC管理器(C:\Windows\System32\odbcad32.exe):
    • 检查MyDSN指向的Access文件路径是否正确,文件未被锁定、损坏或移动
    • 点击「测试连接」确认数据源能正常访问数据库

3. 绕过SQLAlchemy表反射逻辑

pd.read_sql_table会触发表结构反射,而sqlalchemy-access的反射依赖Access COM对象,容易出问题。改用pd.read_sql_query直接查询,避免反射:

import pandas as pd
import pyodbc

# 直接用pyodbc连接,跳过sqlalchemy-access
conn = pyodbc.connect('DSN=MyDSN')
df_date = pd.read_sql_query('SELECT * FROM [DIM Date]', conn)
conn.close()

4. 修复pywin32组件

conda环境中的pywin32(win32com依赖)可能版本不兼容,重装并注册:

pip uninstall -y pywin32
pip install pywin32==227
python -m pywin32.postinstall -install

5. 排查系统更新影响

脚本一周前突然失效,大概率是Windows/Office更新导致驱动损坏:

  • 打开「设置-更新和安全-查看更新历史记录」,回滚最近一周的可疑更新
  • 测试脚本是否恢复正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:01:08