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

如何在Python中使用Microsoft Access数据库?连接后执行查询报错

问题根源:用错了数据库库!

你遇到的报错完全在情理之中——SQLite 和 Microsoft Access 是两种完全独立、格式不兼容的数据库系统,哪怕你把 Access 的 .accdb/.mdb 文件重命名成 .db,sqlite3 库也根本识别不了它的格式,自然会提示“该文件并非数据库”。

为什么会这样?

  • sqlite3 是 Python 内置的专门用于操作 SQLite 数据库的库,它只能读写 SQLite 原生的 .db 文件。
  • Microsoft Access 用的是 Jet/ACE 数据库引擎,原生格式是 .mdb(旧版)或 .accdb(新版),和 SQLite 的文件结构完全不同,两者没有兼容性。

正确的解决方法:用支持 Access 的库连接

要在 Python 里操作 Access 数据库,你需要用 pyodbc 或者 pypyodbc 这类支持 ODBC 驱动的库,步骤如下:

1. 先把文件改回原扩展名

把你的 TestDB.db 改回 Access 原生的扩展名,比如 TestDB.accdb 或者 TestDB.mdb,这样驱动才能正确识别文件类型。

2. 安装依赖库

先安装 pyodbc:

pip install pyodbc

3. 编写正确的连接代码

根据你的 Access 文件版本和系统位数(32/64位),使用对应的连接字符串:

import pyodbc

def create_access_connection(db_file):
    conn = None
    try:
        # 分两种情况选择连接字符串:
        # 情况1:.accdb 文件(Access 2007+),用 ACE 驱动
        conn_str = f'DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={db_file};'
        # 情况2:.mdb 文件(旧版 Access),用 Jet 驱动(仅32位系统支持)
        # conn_str = f'DRIVER={{Microsoft Jet 4.0 OLE DB Driver}};DBQ={db_file};'
        
        conn = pyodbc.connect(conn_str)
        print("成功连接到 Access 数据库")
        
        # 执行 SELECT 查询
        cursor = conn.cursor()
        cursor.execute('SELECT * FROM Table1')
        # 读取查询结果
        rows = cursor.fetchall()
        for row in rows:
            print(row)
            
    except pyodbc.Error as e:
        print(f"连接或查询出错: {e}")
    finally:
        if conn:
            conn.close()

if __name__ == '__main__':
    create_access_connection(r"TestDB.accdb")  # 改成你实际的文件名

额外注意事项

  • 驱动位数匹配:如果你的 Python 是64位,必须安装64位的 Access ODBC 驱动;如果是32位 Python,就要装32位驱动。如果没有驱动,可以去微软官网下载「Microsoft Access Database Engine」。
  • Jet 驱动限制:Microsoft Jet 4.0 OLE DB Driver 只支持32位系统,且仅能处理 .mdb 文件,新版系统建议用 ACE 驱动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:57:36