我正在使用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,但内容似乎没有关联。
知道为什么会这样吗?
答案 0 :(得分:0)
我也有类似的问题。原来我的模型配置错误,并且在保存函数的第一次迭代中出现了错误。我猜想某种数据库锁仍然存在,随后的调用给您带来了原子块问题?尝试运行lm.save(verbose=True, strict=True)
来捕获任何IntegrityError
。
答案 1 :(得分:0)
似乎在源层中有MultiPolygon。
将模式几何更改为模型。MultiPolygonField解决了您的问题。