如何在SpatiaLite SQLite数据库中删除地理空间元数据表?

5jvtdoz2  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(114)

SpatiaLite包括一个用于在现有SQLite数据库(即InitSpatialMetaData())中建立地理空间功能的函数。
我正在寻找一种类似的方法来拆卸地理空间元数据表以及相关的触发器和视图,特别是作为在数据库的alembic迁移上下文中实现downgrade()函数的一种方法。目前,唯一的方法似乎是专门手动调出每一段元数据,并逐个删除它们。这是最好的方法,还是有更好的方法来删除这些元数据表,等等?
相关版本信息:
操作系统:Debian Buster
SQLite:3.27.2
SpatiaLite:4.3
生成空间表的代码(来自GeoAlChemy2 SpatiaLite教程):

from sqlalchemy import create_engine
from sqlalchemy.event import listen
from sqlalchemy.sql import select, func

def load_spatialite(dbapi_conn, connection_record):
    dbapi_conn.enable_load_extension(True)
    dbapi_conn.load_extension('/usr/lib/x86_64-linux-gnu/mod_spatialite.so')

engine = create_engine('sqlite:///gis.db', echo=True)
listen(engine, 'connect', load_spatialite)

conn.execute(select([func.InitSpatialMetaData()]))

tldr;SpatiaLite是否有与函数InitSpatialMetaData()相反的模拟函数?

2hh7jdfx

2hh7jdfx1#

我没有找到任何删除所有元数据表的方法。
但是,清理不再需要的SpatialTables的最有效方法是

SELECT DropGeoTable(table_name);

这将具有与DROP TABLE IF EXISTS table_name相同的效果;
这将删除GEOMETRY_COLUMNS表中的所有条目和创建的触发器,并删除任何其他依赖项(如任何已注册的SpatialView)

相关问题