SpatiaLite包含一个用于在现有SQLite数据库中维护地理空间功能的函数,即InitSpatialMetaData()
。
我正在寻找一种类似的方法来拆除地理空间元数据表以及相关的触发器和视图,特别是作为在我的数据库的alembic迁移上下文中实现downgrade()
函数的一种方式。目前,唯一的方法似乎是专门手动调出每一块元数据,并单独删除它们。这是最好的方法还是有更好的方法来删除这些元数据表等?
相关版本信息:
OS: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()
相反的模拟
我没有找到任何删除所有元数据表的方法。
但是,清理不再需要的空间表最有效的方法是
SELECT DropGeoTable(table_name);
这将具有与DROP TABLE IF EXISTS table_name
相同的效果;
这将删除geometry_columns TABLE中的任何条目和创建的TRIGGER并删除任何其他依赖项(如任何已注册的SpatialViews(