如何在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
相关产品推荐
相关产品推荐

