我通过python创建动态数据库。上面的代码工作正常但是当我在查询中使用函数 InitSpatialMetadata()时,数据库的创建速度非常慢。
该文件以0kb开头,并且在完全创建之前它会增加每秒2-5kb的速度。所有过程大约需要2-3分钟才能完成,最终文件需要3mb。
有人已经有这个问题吗?
import sqlite3
db = sqlite3.connect('C:/test.sqlite')
cursor = db.cursor()
cursor.execute("SELECT InitSpatialMetadata()")
答案 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