Azure 数据库上的 Sqlite 已锁定

Posted

技术标签:

【中文标题】Azure 数据库上的 Sqlite 已锁定【英文标题】:Sqlite on Azure database is locked 【发布时间】:2022-01-22 19:24:36 【问题描述】:

我刚刚使用 Python 笔记本部署了 Azure 机器学习。 当我想用 sqlite db 创建表时:出现错误:

OperationalError: database is locked

在本地实例代码上工作正常。是否有可能简单地连接与笔记本位于同一文件夹中的 sqlite db?

【问题讨论】:

【参考方案1】: DB 浏览器一定是建立了导致其崩溃的额外连接。

您必须已从 SQLite 浏览器打开数据库。从浏览器中关闭它。

OperationalError: database is locked

表明您的应用程序遇到的并发量超过了 sqlite 在默认配置中所能处理的数量。

这个错误意味着一个线程或进程在数据库连接上有一个排他锁,另一个线程超时等待锁被释放。

Python 的 SQLite 包装器有一个默认的超时值,它决定了第二个线程在超时之前允许在锁上等待多长时间并引发 OperationalError: database is locked 错误。

如果您遇到此错误,您可以通过以下方式解决:

切换到另一个数据库后端。在某个时刻,SQLite 对于现实世界的应用程序来说变得过于“精简”,而这些并发错误表明您已经达到了这一点。

重写代码以减少并发并确保数据库事务是短暂的。

通过设置超时数据库选项来增加默认超时值

请参阅 “Database is locked” error 和 SQLite Error Database is Locked 和 SO Thread 了解更多信息。

【讨论】:

锁定错误是解决 SQLite 错误数据库被锁定问题的简单方法之一,方法是创建一个没有锁定的备份数据库。完成后,您可以将原始数据库替换为其备份副本。 是的,但这里的关键是 Azure。在本地 jupyter 实例上,google colab 或 kaggle notebooks 相同的代码可以正常工作。

以上是关于Azure 数据库上的 Sqlite 已锁定的主要内容,如果未能解决你的问题,请参考以下文章

PyCharm 无法连接到 SQLite:SQLITE_BUSY,(数据库已锁定)

为啥在使用 Perl 的 DBD::SQLite 时,SQLite 会为事务中的第二个查询提供“数据库已锁定”?

在 SQLite 中创建视图时出现“数据库已锁定”错误

将站点部署到 Azure 时出现“OperationalError:数据库已锁定”

新的 sqlite3 数据库被锁定

iOS 读取数据时收到 Sqlite 错误数据库被锁定