杰瑞科技汇

Python如何读取Access数据库?

使用 pyodbc (推荐)

这是最经典和广泛使用的方法,兼容性最好。

Python如何读取Access数据库?-图1
(图片来源网络,侵删)

第 1 步:安装必要的软件

  1. 安装 Python: 确保你的系统已经安装了 Python。

  2. 安装 pyodbc: 打开你的终端或命令提示符,运行以下命令:

    pip install pyodbc
  3. 安装 Access 数据库引擎 (最关键的一步): Python 本身无法直接理解 Access 文件,你需要一个“桥梁”,也就是 Microsoft 提供的 ODBC 驱动程序,你需要安装与你的 Python 架构(32位或64位)相匹配的版本。

    如何检查 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数据库连接已关闭。")

常见问题与解决方法

  1. Error: ('IM002', 'IM002[Microsoft][ODBC 驱动程序管理器] 未找到数据源名称并且未指定默认驱动程序')

    • 原因: pyodbc 找不到 ODBC 驱动,几乎可以肯定是 Access 数据库引擎没有安装,或者安装的版本(32/64位)与你的 Python 不匹配。
    • 解决: 仔细检查 Python 的位数,并下载安装对应版本的 Access 数据库引擎。
  2. Error: ('HY000', 'HY000[Microsoft][ODBC Microsoft Access Driver] 数据库路径无效')

    • 原因: 连接字符串中的 DBQ= 路径不正确,文件可能不存在,或者路径中有中文字符/特殊字符导致解析错误。
    • 解决:
      • 检查文件路径是否 100% 正确。
      • 最佳实践: 在 Windows 路径前加上 r (r'C:\...'),这会将其标记为原始字符串,防止反斜杠 \ 被转义。
      • 尝试将数据库文件移动到一个简单的、不带空格和中文的路径下(如 C:\data\test.accdb)进行测试。
  3. Error: ('HY000', 'HY000[Microsoft][ODBC Microsoft Access Driver] 不能更新,数据库或对象为只读。')

    • 原因: 你尝试执行一个 UPDATEINSERT 语句,但数据库文件或所在的文件夹是只读的。
    • 解决: 检查数据库文件的属性,取消“只读”选项,确保你的 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

分享:
扫描分享到社交APP
上一篇
下一篇