为什么SQLite执行insert插入命令时会出现与new运算符相关的报错

报错原因
你遇到的是SQLite经典的attempt to write a readonly database(尝试写入只读数据库)报错,可按以下优先级排查修复:
解决方案
- 检查数据库文件自身权限:确保运行程序的账号对
.db数据库文件拥有读写权限- Linux/macOS 环境可执行命令
chmod 664 数据库文件路径赋权,同时确认文件所属用户/用户组和程序运行账号匹配 - Windows 环境右键点击数据库文件,选择「属性-安全」,给当前运行程序的账号添加「修改」「写入」权限
- Linux/macOS 环境可执行命令
- 检查数据库所在文件夹权限:SQLite执行写入操作时需要在同目录生成临时journal文件,因此程序账号对db文件所在的文件夹同样需要读写权限
- 排查文件占用问题:确认是否有其他进程已经以只读模式打开该数据库,或是上一次程序异常退出导致文件锁未释放,关闭相关占用进程/重启设备即可解除锁限制
- 检查存储路径合规性:如果数据库放在只读分区、移动存储介质或是系统保护目录(Windows的Program Files、macOS的/System目录、Linux的/root目录等),将数据库迁移到普通用户可读写的普通目录再测试
- 核对数据库连接配置:确认代码打开数据库时没有手动设置只读参数,以Python为例,正确的可写连接示例如下:
import sqlite3 # 不要添加mode=ro的只读参数配置 conn = sqlite3.connect("example.db")
内容的提问来源于stack exchange,提问作者poorfella
相关产品推荐
相关产品推荐

