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 会为事务中的第二个查询提供“数据库已锁定”?