我正在我的本地机器上创建一个测试数据库,所以我可以测试一些计算,然后再转到更大的运行,以保存在实际的postgres数据库中。但是我无法sqlite3
创建数据并将数据保存到我的geom
列(由python正确创建)。似乎geom
列也未创建。任何帮助将不胜感激。
conn = lite.connect('geom_test.db')
c = conn.cursor()
c.execute("""CREATE TABLE test
(
lat double precision,
long double precision,
speed double precision)"""))
c.execute("""
SELECT AddGeometryColumn('test', 'geom',
4326, 'POINT', 'XY');""")
line = ogr.Geometry(ogr.wkbLineString)
line.AddPoint_2D(lon,lat)
line = line.ExportToWkt()
qry ="INSERT INTO sequence VALUES (?,?,?,?);"
conn = lite.connect('geom_test.db')
c = conn.cursor()
c.executemany(qry, data) #data is 4 columns dict
c.close()
conn.commit()
conn.close()
答案 0 :(得分:1)
您需要导入spatialite共享库:
import sqlite3 as lite
from os.path import realpath
conn = lite.connect('geom_test.db')
library_path = "/usr/local/lib/mod_spatialite.so" # on my ubuntu linux
conn.enable_load_extension(True)
conn.load_extension(realpath(library_path))
或者加载扩展程序的其他方式:
conn.execute("SELECT load_extension(?, 'sqlite3_modspatialite_init');",
(realpath(library_path),))
在Windows上,名称将为' mod_spatialite.dll' (还要注意提供给load_extension()的路径,即正确转义有问题的字符并在调用之前解析符号链接。)
无论如何this page on SpatiaLite website显示了有关加载共享库的一些细节。
编辑:
如果失败,加载将引发OperationalError
。如果成功,您可以检查它是否使用了您期望的版本(当然还要执行您尝试的操作):
vs = str([i for i in c.execute("""SELECT spatialite_version()""")])
vgeos = str([i for i in c.execute("""SELECT geos_version()""")]
print('Spatialite {} (GEOS {})'.format(
vs.strip("()[]',"), vgeos.strip("()',[]")))
答案 1 :(得分:0)
看起来你正在使用PostGIS,后者为PostgreSQL增加了功能。其中包括AddGeometryColumn
函数。这不是SQLite可用的,因为它不是标准功能。
答案 2 :(得分:0)
看起来您正在使用SpatiaLite,它为SQLite增加了功能。见Recipe #6: Creating a new Geometry column。下一张幻灯片显示了如何将一些简单的几何图形加载到表格中。
请参阅main web resource for SpatiaLite,附带食谱,参考资料等。如果您需要查看几何图形,请尝试使用QGIS。