使用Sqlite函数InitSpatialMetaData()通过Python创建Spatialite数据库的性能问题

时间:2014-06-04 21:10:35

标签: python sqlite gis spatialite

我通过创建动态数据库。上面的代码工作正常但是当我在查询中使用函数 InitSpatialMetadata()时,数据库的创建速度非常慢。
该文件以0kb开头,并且在完全创建之前它会增加每秒2-5kb的速度。所有过程大约需要2-3分钟才能完成,最终文件需要3mb。 有人已经有这个问题吗?

import sqlite3
db = sqlite3.connect('C:/test.sqlite')
cursor = db.cursor()
cursor.execute("SELECT InitSpatialMetadata()")

4 个答案:

答案 0 :(得分:7)

这是一个老问题,但是按this thread on gdal-dev,并且取决于您的图书馆版本,

InitSpatialMetadata(1) // Note the parameter

可能运行得更快。它确实适合我。

答案 1 :(得分:3)

它将空间元数据构建到基础中,3mb是标准大小。

要加速请求,只需使用开始/提交事务以静默模式继续:

cursor.execute("BEGIN ;")
cursor.execute("SELECT InitSpatialMetadata()")
cursor.execute("COMMIT ;")

答案 2 :(得分:1)

您可以设置一些编译指示以使此过程更快:

在执行“SELECT InitSpatialMetadata()”之前,执行:

“PRAGMA synchronous = OFF”和 “PRAGMA journal_mode = MEMORY'

然后返回设置:

“PRAGMA synchronous = FULL”和 “PRAGMA journal_mode = DELETE'

这适用于我

答案 3 :(得分:0)

我发现使用pyspatialite代替基本的sqlite3模块时不再是问题(至少在Windows上) - https://github.com/lokkju/pyspatialite