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

4 投票
4 回答
1984 浏览
提问于 2025-04-18 08:38

我正在用创建一个动态数据库。上面的代码运行得很好,但当我在查询中使用InitSpatialMetadata()这个函数时,数据库创建得非常慢。
文件开始时是0kb,然后每秒大约增加2-5kb,直到完全创建好。整个过程大约需要2-3分钟,最终的文件大小是3mb。有人遇到过这个问题吗?

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

4 个回答

0

我发现当在Windows上使用pyspatialite代替基本的sqlite3模块时,这个问题就不再存在了。你可以在这里找到pyspatialite的相关信息:https://github.com/lokkju/pyspatialite

2

你可以设置一些指令来让这个过程更快:

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

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

然后再把设置改回来:

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

这样做对我有效。

3

它是在基础数据中构建空间元数据,3MB是一个标准大小。

为了加快请求的速度,可以使用开始/提交事务的方式,这样可以在静默模式下进行:

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

这是一个老问题,不过根据gdal-dev上的这个讨论,而且还要看你使用的库的版本,

InitSpatialMetadata(1) // Note the parameter

可能会运行得更快。我自己就是这样。

撰写回答