'Load QGIS project from geopackage
My attempt is to use the same function behind the above dialog in which QGIS allow to load project form a geopackage by giving the connection, the path. The idea is to be able to check if a geopackage contains project or not. what I did so far is the following
prj = QgsProject.instance()
prj.read('geopackage:/home/me/Downloads/test.gpkg')
but this gave me an error: ogr error no more rows
Thanks
Solution 1:[1]
Try this to check if the Geopackage has a project or not:
import sqlite3
import contextlib
geopackage = r"D:\temp\test.gpkg"
with contextlib.closing(sqlite3.connect(geopackage)) as connection:
cursor = connection.cursor()
cursor.execute("""
SELECT name
FROM sqlite_master
WHERE type='table'
AND name='qgis_projects';
""");
row = cursor.fetchone()
print(f"Contains no projects? {not row}")
And to open a project:
PROJECT_NAME = "proj"
iface.addProject(rf"geopackage:D:\temp\test.gpkg?projectName={PROJECT_NAME}")
It took me quite a while to come up with the solution even though it was right in front of me.
Anyways, I'll leave the initial answer below since it may be useful for others or if you want to know more about QGIS Projects and Geopackages...
Have a look at this GitHub project pka/qgpkg.
The QGIS plugin adds a toolbar button for saving the current project in a GeoPackage file and another one for loading a QGIS project from a GeoPackage file.
However, the project seems not to be maintained anymore since 4 years. So it is not used in QGIS 3.24.1 (which I use) since the project code still uses PyQt4.
There is another project kadas-albireo/kadas-gpkg-plugin which seems to do the same and uses PyQt5.
And I assume these are the relevant C++ classes in the QGIS repo:
You may be able to reverse engineer the code and write your own code based on these projects.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |