【问题标题】:GeoDjango - LayerMapping: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' blockGeoDjango - LayerMapping:当前事务中发生错误。在“原子”块结束之前,您无法执行查询
【发布时间】:2018-10-12 01:48:00
【问题描述】:

我正在使用 LayerMapping 将 shapefile 添加到数据库中。这是我正在使用的代码。 shapefile 约为 100MB,因此需要添加一堆多边形。

mapping = {'name': 'OBJECTID', 'poly': 'POLYGON'}
lm = LayerMapping(TestGeo, 'toronto geo/PROPERTY_BOUNDARIES_WGS84.shp', mapping)
lm.save(verbose=True)

运行上述代码后,我会看到大约 10 秒的成功消息,显示类似于 Saved: 'name': 12345 的内容。然后 10 秒后,消息变成:

Failure to save: {'name': 12345, 'poly': (....)}: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.

显示错误消息后它仍然继续运行(我猜它移动到下一个多边形对象上)。在遍历每个多边形之后,尽管前几百个左右的多边形显示了成功消息,但 shapefile 中的多边形都没有保存。

我遇到了a similar error,但内容似乎不相关。

知道为什么会这样吗?

【问题讨论】:

    标签: django geodjango


    【解决方案1】:

    我也有类似的问题。原来我的模型配置错误,并且在保存功能的第一次迭代中出现了错误。我猜某种数据库锁仍然存在,随后的调用会给您带来原子块问题?尝试运行lm.save(verbose=True, strict=True) 来捕获任何IntegrityError

    【讨论】:

      【解决方案2】:

      源层好像有MultiPolygon。

      将您的模式几何更改为 models.MultiPolygonField 解决您的问题。

      【讨论】:

        猜你喜欢
        • 2018-11-24
        • 2023-03-27
        • 2021-05-13
        • 2018-11-03
        • 2013-05-06
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多