是否可以使用或如何避免使用冒号(“:”)作为sqlite数据库路径的开始

2024-04-19 01:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为QGIS(QGIS Plugin Builder)创建一个插件。插件目录的相对路径需要以冒号开头。例如,图标的加载方式如下:

icon_path = ':/plugins/into_sqlite/icon.png'

当我尝试对sqlite数据库执行相同操作时,数据库无法加载:

connection = sqlite3.connect(":/plugins/PLUGINNAME/database.sqlite")
OperationalError: unable to open database file

但当我尝试同样的方法给出绝对路径时,它是有效的:

connection = sqlite3.connect("/home/USERNAME/.qgis/python/plugins/PLUGINNAME/database.sqlite")
OperationalError: unable to open database file

我认为问题是路径以冒号开始,sqlite使用冒号作为特殊字符,例如在内存中加载数据库:

connection = sqlite3.connect(":memory:")

但我需要使用真实路径。如何提供路径并转义冒号或启动没有冒号的路径?你知道吗


Tags: 路径插件数据库sqliteconnectpluginsconnectionsqlite3
1条回答
网友
1楼 · 发布于 2024-04-19 01:34:14

我现在使用以下代码来解决这个问题:

path = abspath(":/plugins/PLUGINNAME/")
path_abs = path.replace(":", ".qgis2/python")
path_db = join(path_abs, "db.sqlite")
connection = sqlite3.connect(path_db)

变量具有以下值:

path = "/home/USERNAME/:/plugins/PLUGINNAME"
path_abs = "/home/USERNAME/.qgis2/python/plugins/PLUGINNAME"
path_db = "/home/USERNAME/.qgis2/python/plugins/PLUGINNAME/db.sqlite"

另一个建议:

IRC的建议是:

curr_path = os.path.dirname(os.path.abspath(__file__))
self.path_db = os.path.join(curr_path, 'db.sqlite')

相关问题 更多 >