GeoDjango - LayerMapping:当前事务中发生错误。在“原子”块结束之前,您无法执行查询

时间:2018-05-02 02:33:28

标签: django geodjango

我正在使用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,但内容似乎没有关联。

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

似乎在源层中有MultiPolygon。

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