使用Sqlite函数InitSpatialMetaData()在Python中创建Spatialite数据库时出现性能问题

4
我正在通过创建一个动态数据库。上面的代码可以正常工作,但是当我在查询中使用InitSpatialMetadata()函数时,数据库创建非常缓慢。
文件从0kb开始,每秒增加大约2-5kb,直到完全创建。整个过程需要大约2-3分钟才能完成,最终文件大小为3mb。 有人遇到过这个问题吗?
import sqlite3
db = sqlite3.connect('C:/test.sqlite')
cursor = db.cursor()
cursor.execute("SELECT InitSpatialMetadata()")
4个回答

9

这是一个老问题,但根据 gdal-dev 上的此帖子,并且取决于您所使用的库的版本,

InitSpatialMetadata(1) // Note the parameter

可能会运行得更快。在我的情况下确实如此。


3

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

为了加快请求速度,只需使用begin/commit交易以静默模式进行处理:

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

2

您可以设置一些参数以使此过程更快:

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

"PRAGMA synchronous = OFF" 和 "PRAGMA journal_mode = MEMORY"

然后回到设置:

"PRAGMA synchronous = FULL" 和 "PRAGMA journal_mode = DELETE"

这对我起作用了。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接