可以使用冒号(":")作为sqlite数据库路径的开头,或者如何避免使用

时间:2015-10-18 12:35:38

标签: python sqlite qgis

我正在为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使用冒号作为特殊字符,例如在memore中加载数据库:

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

但我需要使用实际路径。如何提供路径并逃脱冒号或在没有冒号的情况下启动路径?

1 个答案:

答案 0 :(得分:0)

我现在使用此代码解决了这个问题:

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')