如何捕获sqlite数据库锁定错误

时间:2017-11-09 16:10:41

标签: python django sqlite gdal

编辑:链接的“重复”答案并未解决我的疑虑。我知道错误发生的原因并且不希望更改超时长度。我想知道如何正确检测锁定的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)

错误发生在访问数据库的低级代码中。该代码会抛出打印到我的控制台的任何错误,但幸运的是它似乎并没有真正引发异常。

当有人尝试从中访问数据时,仍在从外部源填充缓存时发生错误。我不知道如何正确检查这种状态并返回响应。

0 个答案:

没有答案