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

Python操作SQLite3插入数据报database is locked错误如何解决

sqlite3 插入数据报 "database is locked" 修复方案

该报错和SQL语句用字符串拼接还是参数化查询写法无关,本质是SQLite的写锁被其他连接持有,新写入请求无法获取锁触发,常见触发原因和对应解决方法如下:

  • 其他进程/程序占用数据库文件:比如同时打开的SQLite可视化工具(如DB Browser for SQLite)、其他运行中的Python脚本、定时任务正连接Tadawul.db执行读写,或是之前运行出错未正常退出的脚本残留了数据库连接。关闭所有可能访问该数据库文件的程序后,重新运行脚本即可。
  • 代码未正确释放写锁:SQLite执行写入操作时默认开启事务,会持有数据库写锁直到事务提交/回滚,如果代码只执行插入语句不提交事务、也不主动关闭连接,写锁会持续残留,后续所有写入操作都会触发锁报错。

推荐使用上下文管理器编写数据库操作逻辑,自动处理事务提交、回滚和连接释放,不会残留锁,正确可运行代码如下:

import sqlite3

hello = "('hello')"
# with块自动管理连接生命周期
with sqlite3.connect('Tadawul.db') as conn:
    curs = conn.cursor()
    # 此前编写的参数化查询逻辑正确,无需修改
    curs.execute("INSERT INTO stock_price (close) VALUES (?)", (hello, ))
# 退出with块时自动提交事务、关闭连接释放锁

异常排查补充

如果关闭所有相关程序后仍报错,可进入Tadawul.db所在目录,查找Tadawul.db-journal、Tadawul.db-wal、Tadawul.db-shm这类SQLite运行时生成的临时文件,确认无程序正在操作数据库的前提下,删除这类临时文件即可清除残留锁。

注意:禁止使用字符串拼接方式构造SQL语句,该写法存在SQL注入风险,参数化查询是官方推荐的安全写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:21:10