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

使用Python的pyodbc读取Access数据库遇无读取权限错误求助

问题:使用pyodbc连接Access数据库时遭遇读取权限错误

尝试用Python的pyodbc模块提取Microsoft Access数据库数据,代码如下:

import pyodbc

conn_str = (
    r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
    r'DBQ=directory_that_access_the_database;'
    r'DATABASE=name_of_the_database;'
    r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)
cursor = cnxn.cursor()
cursor.execute('select * from database where database.date = #mm/dd/yyyy#')
for row in cursor.fetchall():
    print(row)

执行后返回错误:

('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Record(s) cannot be read; no read permission on database. (-1907) (SQLExecDirectW)")

已通过ribbon--Users和组权限功能为数据库开启权限,但错误仍存在,怀疑权限设置遗漏细节,寻求解决办法。


解决方案
  • 修正文件系统级权限
    Access数据库文件及其所在文件夹,需要当前运行Python的用户拥有读取和写入权限(Access运行时会生成临时文件,仅读权限可能引发异常)。操作步骤:

    1. 右键数据库文件→属性→安全选项卡
    2. 点击"编辑",添加当前登录的Windows用户
    3. 勾选"读取和写入"权限,应用保存
  • 优化连接字符串
    Access的ODBC连接字符串不需要DATABASE和Trusted_Connection参数,冗余参数可能引发冲突,修正后的连接字符串示例:

    conn_str = (
        r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};'
        r'DBQ=C:\path\to\your\database.accdb;'  # 替换为实际文件路径
    )
    
  • 修复SQL语句的关键字冲突
    你的SQL中使用了database作为表名,这是SQL保留字,必须用方括号[]包裹,否则会引发语法或逻辑异常,修正后的查询:

    select * from [database] where [database].[date] = #mm/dd/yyyy#
    
  • 检查Access数据库内部安全细节

    1. 确保数据库未启用加密:打开数据库→文件→信息→解密数据库(如果显示加密状态)
    2. 确认数据库未设置为只读:右键文件→属性→取消勾选"只读"
    3. 检查用户权限时,确保为当前使用的Access用户(如果启用用户级安全)分配了对应表的读取数据权限,而非仅添加用户到组但未配置表权限
  • 排除文件锁定问题
    如果Access客户端正在打开该数据库,且处于独占模式,会导致外部连接无法读取数据。关闭Access客户端,或打开时选择"打开共享"模式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:10:15