You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何以只读方式读取Access(.mdb)数据库,不影响其他用户写入?

解决共享网络Access .mdb数据库只读读取的问题

你遇到的问题根源在于默认的pyodbc连接Access数据库时会获取排他锁,直接占用了数据库的写入权限,导致其他设备无法编辑。要解决这个问题,只需要在连接字符串中添加只读模式参数,让连接以只读方式打开,这样就不会锁定数据库,其他人可以正常进行写入操作。

修改后的完整代码

核心是在连接字符串里加入 Mode=Read Only; 参数,同时我也补上了你原代码遗漏的csv模块导入,避免运行报错:

import pyodbc
import csv  # 原代码缺少该导入,需补充

DRV = '{Microsoft Access Driver (*.mdb)}'
PWD = ''
mdb = 'C:\\newfolder\\database.mdb'
# 添加Mode=Read Only; 开启只读连接模式
con = pyodbc.connect('DRIVER={};DBQ={};PWD={};Mode=Read Only;'.format(DRV, mdb, PWD))
cur = con.cursor()
sql = 'SELECT * FROM CK_Test_Results;'
rows = cur.execute(sql).fetchall()
cur.close()
con.close()

# 建议添加encoding参数避免中文乱码
with open('Database.csv', 'w', newline='', encoding='utf-8') as fou:
    csv_writer = csv.writer(fou)
    csv_writer.writerows(rows)

关键说明

  • Mode=Read Only; 是核心配置:它告诉Access驱动以只读权限打开数据库,不会抢占写入锁,其他用户依然可以正常编辑数据库内容。
  • 补充csv模块导入:原代码中使用了csv.writer但未导入模块,运行时会抛出NameError,这里已经补上。
  • 新增encoding='utf-8':写入CSV时指定编码,能有效避免中文、特殊字符出现乱码问题,是实用的优化项。

这样修改后,你的脚本读取数据库时就不会影响其他设备的正常写入操作了。

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

火山引擎 最新活动