使用 pyodbc (推荐)
这是最经典和广泛使用的方法,兼容性最好。

第 1 步:安装必要的软件
-
安装 Python: 确保你的系统已经安装了 Python。
-
安装
pyodbc库: 打开你的终端或命令提示符,运行以下命令:pip install pyodbc
-
安装 Access 数据库引擎 (最关键的一步): Python 本身无法直接理解 Access 文件,你需要一个“桥梁”,也就是 Microsoft 提供的 ODBC 驱动程序,你需要安装与你的 Python 架构(32位或64位)相匹配的版本。
-
对于 64位 Python: 下载并安装 Microsoft Access Database Engine 2025 Redistributable。
(图片来源网络,侵删)- 下载链接:https://www.microsoft.com/en-us/download/details.aspx?id=54920
- 注意: 即使你使用的是较新版本的 Office (如 2025, 2025, Microsoft 365),也推荐安装这个 2025 的引擎,因为它兼容性最好。
-
对于 32位 Python: 下载并安装 Microsoft Access Database Engine 2010 Redistributable。
如何检查 Python 的位数? 在 Python 交互式环境中运行:
import platform print(platform.architecture()) # 输出类似: ('64bit', 'WindowsPE') # 或者 ('32bit', 'WindowsPE')确保你安装的引擎位数与 Python 的位数一致。
-
第 2 步:编写 Python 代码
连接字符串是 pyodbc 的核心,它告诉 pyodbc 如何连接到你的数据库。
连接字符串模板:
DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=你的数据库文件路径;
代码示例:
假设你有一个名为 mydatabase.accdb 的数据库文件,里面有一个名为 Customers 的表。
import pyodbc
# --- 1. 设置数据库连接信息 ---
# 替换成你的 .accdb 文件的实际路径
db_file = r'C:\path\to\your\mydatabase.accdb'
# 构建连接字符串
# 注意:DRIVER 的名称可能略有不同,如果下面代码报错,可以在 "ODBC 数据源管理器" 中查看确切的驱动名称
# 通常是 "Microsoft Access Driver (*.mdb, *.accdb)" 或 "Microsoft Access Text Driver (*.txt, *.csv)"
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=' + db_file + ';'
)
try:
# --- 2. 建立数据库连接 ---
# 使用 pyodbc.connect() 建立连接
# autocommit=True 意味着你的查询不需要手动调用 connection.commit()
conn = pyodbc.connect(conn_str, autocommit=True)
print("成功连接到数据库!")
# --- 3. 创建游标 ---
# 游标用于执行 SQL 查询
cursor = conn.cursor()
# --- 4. 执行 SQL 查询 ---
# 替换成你的表名
table_name = 'Customers'
sql_query = f"SELECT * FROM {table_name}"
cursor.execute(sql_query)
# --- 5. 获取并处理数据 ---
# 方法一:获取所有行到一个列表中
rows = cursor.fetchall()
print(f"\n从表 '{table_name}' 中获取到 {len(rows)} 条记录:")
for row in rows:
# row 是一个元组,你可以通过索引或列名来访问数据
# 注意:pyodbc 默认不启用列名访问,需要额外配置
print(f"ID: {row[0]}, 姓名: {row[1]}, 城市: {row[2]}")
# 方法二:逐行处理(适用于大数据量,节省内存)
print("\n逐行处理数据:")
cursor.execute(sql_query) # 需要重新执行查询,因为之前的 fetchall() 已经消耗了游标
for row in cursor:
print(f"ID: {row[0]}, 姓名: {row[1]}, 城市: {row[2]}")
except pyodbc.Error as e:
print(f"数据库操作出错: {e}")
# 如果是连接错误,可能是驱动文件路径问题
if 'Data source name not found' in str(e):
print("错误:找不到 ODBC 驱动,请确保已正确安装 Access 数据库引擎,并且驱动名称正确。")
finally:
# --- 6. 关闭连接 ---
# 这是一个好习惯,确保连接被正确关闭
if 'conn' in locals() and conn:
conn.close()
print("\n数据库连接已关闭。")
使用 pandas (适合数据分析)
如果你的主要目的是将数据读入 pandas DataFrame 进行分析,可以使用 pandas 自带的 read_sql_query 功能,它底层也是使用 pyodbc。
前提: 你已经按照方法一的步骤安装了 pyodbc 和 Access 数据库引擎。
代码示例:
import pandas as pd
import pyodbc
# --- 1. 设置数据库连接信息 (与方法一相同) ---
db_file = r'C:\path\to\your\mydatabase.accdb'
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=' + db_file + ';'
)
try:
# --- 2. 使用 pandas 的 read_sql_query 直接读取数据 ---
# 替换成你的 SQL 查询
sql_query = "SELECT * FROM Customers WHERE City = '北京';"
# 创建数据库连接
conn = pyodbc.connect(conn_str)
# 将查询结果直接读入 DataFrame
df = pd.read_sql_query(sql_query, conn)
print("成功将数据读入 pandas DataFrame:")
print(df)
# --- 3. 现在你可以轻松地进行数据分析 ---
print("\n数据描述:")
print(df.describe())
except Exception as e:
print(f"出错: {e}")
finally:
# --- 4. 关闭连接 ---
if 'conn' in locals() and conn:
conn.close()
print("\n数据库连接已关闭。")
常见问题与解决方法
-
Error: ('IM002', 'IM002[Microsoft][ODBC 驱动程序管理器] 未找到数据源名称并且未指定默认驱动程序')- 原因:
pyodbc找不到 ODBC 驱动,几乎可以肯定是 Access 数据库引擎没有安装,或者安装的版本(32/64位)与你的 Python 不匹配。 - 解决: 仔细检查 Python 的位数,并下载安装对应版本的 Access 数据库引擎。
- 原因:
-
Error: ('HY000', 'HY000[Microsoft][ODBC Microsoft Access Driver] 数据库路径无效')- 原因: 连接字符串中的
DBQ=路径不正确,文件可能不存在,或者路径中有中文字符/特殊字符导致解析错误。 - 解决:
- 检查文件路径是否 100% 正确。
- 最佳实践: 在 Windows 路径前加上
r(r'C:\...'),这会将其标记为原始字符串,防止反斜杠\被转义。 - 尝试将数据库文件移动到一个简单的、不带空格和中文的路径下(如
C:\data\test.accdb)进行测试。
- 原因: 连接字符串中的
-
Error: ('HY000', 'HY000[Microsoft][ODBC Microsoft Access Driver] 不能更新,数据库或对象为只读。')- 原因: 你尝试执行一个
UPDATE或INSERT语句,但数据库文件或所在的文件夹是只读的。 - 解决: 检查数据库文件的属性,取消“只读”选项,确保你的 Python 脚本对该文件有读写权限。
- 原因: 你尝试执行一个
使用 sqlalchemy (更现代的 ORM 方式)
sqlalchemy 是一个非常流行的 Python SQL 工具包,它提供了一个更抽象、更“Pythonic”的方式来操作数据库,它也需要 pyodbc 作为底层驱动。
安装:
pip install sqlalchemy
代码示例:
import pandas as pd
from sqlalchemy import create_engine
# --- 1. 设置数据库连接信息 ---
db_file = r'C:\path\to\your\mydatabase.accdb'
# SQLAlchemy 的连接字符串格式
# mssql+pyodbc 表示使用 pyodbc 驱动连接到类 SQL Server/Access 的数据库
# Driver 和 DBQ 的参数与 pyodbc 相同
engine_str = (
'mssql+pyodbc:///?odbc_connect=' +
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=' + db_file + ';'
)
try:
# --- 2. 创建 SQLAlchemy 引擎 ---
engine = create_engine(engine_str)
print("成功创建 SQLAlchemy 引擎!")
# --- 3. 使用 pandas + engine 读取数据 ---
sql_query = "SELECT * FROM Customers;"
df = pd.read_sql_query(sql_query, engine)
print("数据已读入 DataFrame:")
print(df)
except Exception as e:
print(f"出错: {e}")
finally:
# --- 4. 关闭引擎 ---
# SQLAlchemy 引擎通常会自动管理连接,但在程序结束时显式关闭是个好习惯
if 'engine' in locals():
engine.dispose()
print("\nSQLAlchemy 引擎已关闭。")
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
pyodbc |
最直接、最底层,功能最全,性能最好,社区支持广泛。 | 代码相对繁琐,需要手动管理游标和连接。 | 需要精细控制数据库操作,或者不使用其他数据科学库的简单脚本。 |
pandas |
极其方便,一行代码就能将数据读入 DataFrame,非常适合数据分析。 | 依赖于 pyodbc,功能受限于 pandas 的接口。 |
数据分析、数据清洗、数据科学项目,这是目前最流行的方式。 |
sqlalchemy |
抽象级别高,代码更优雅,支持 ORM (对象关系映射),便于项目迁移。 | 对于简单查询来说有点“杀鸡用牛刀”,需要理解会话和引擎的概念。 | 构建大型、复杂的应用程序,需要对象映射或未来可能更换数据库类型。 |
对于大多数用户,强烈推荐从 pandas 开始,因为它简单且强大。pandas 无法满足你的需求(例如需要执行复杂的存储过程或进行事务管理),再使用 pyodbc。
