3

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

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

4 回答 4

9

这是一个老问题,但是根据gdal-dev 上的这个线程,并且取决于您的库版本,

InitSpatialMetadata(1) // Note the parameter

可能跑得更快。它对我有用。

于 2016-08-15T07:01:59.880 回答
3

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

要加快请求速度,只需使用开始/提交事务以静默模式进行:

cursor.execute("BEGIN ;")
cursor.execute("SELECT InitSpatialMetadata()")
cursor.execute("COMMIT ;")
于 2014-07-15T15:20:06.750 回答
1

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

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

“PRAGMA 同步 = OFF”和“PRAGMA journal_mode = MEMORY”

然后回到设置:

“PRAGMA 同步 = FULL”和“PRAGMA journal_mode = DELETE”

这对我有用

于 2017-12-01T18:51:23.617 回答
0

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

于 2015-10-23T14:05:31.520 回答