如何以只读方式读取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




