编辑:链接的“重复”答案并未解决我的疑虑。我知道错误发生的原因并且不希望更改超时长度。我想知道如何正确检测锁定的Sqlite数据库,以便我可以做出相应的反应。也就是说,如果文件被锁定,我不想等待或再试一次;我想表明它被锁定了。
我现在在Django框架中有代码,需要访问存储在Sqlite文件中的数据并将其作为JSON(特别是GeoJSON)返回。这个有效,但我有一个特定的情况,可以在锁定状态下访问数据库。
我知道为什么问题正在发生,但我想知道如何检测它何时发生,并返回适当的响应。我天真的猜测是尝试捕获Sqlite OperationalError,但这是无效的。
问题代码:
class GetVectorLayer(APIView):
def post(self, request):
...
...
import sqlite3
try:
cache.write_layers(VectorLayer.objects.filter(pk=layer.pk), Formats.GeoJSON, file_path, epsg, bbox)
except sqlite3.OperationalError as e:
return Response("Cache Locked", status=status.HTTP_423_LOCKED)
import json
执行此操作时,我收到与添加try:
之前相同的错误错误1:sqlite3_step()失败: 数据库被锁定(5)
错误发生在访问数据库的低级代码中。该代码会抛出打印到我的控制台的任何错误,但幸运的是它似乎并没有真正引发异常。
当有人尝试从中访问数据时,仍在从外部源填充缓存时发生错误。我不知道如何正确检查这种状态并返回响应。