4

I would like to delete a .qgs project stored in PostgreSQL using PyQGIS. This SQL code does the job into pgAdmin :

DELETE FROM test2.qgis_projects WHERE name = 'Project_name';

My attempt which doesn't work in PyQGIS is :

from PyQt5.QtSql import *
uri = QgsDataSourceUri()
uri.setConnection("localhost", "5432", "BDtest", "postgres", "password")

db = QSqlDatabase.addDatabase("BDtest"); db.setHostName(uri.host()) db.setDatabaseName(uri.database()) db.setPort(int(uri.port())) db.setUserName(uri.username()) db.setPassword(uri.password()) db.open() query = db.exec_("""DELETE FROM test2.qgis_projects WHERE name = 'Project_name';""") query.next() query.value(0) print(query)

This last code doesn't work in PyQGIS, could someone correct it?

I think it misses uri.setDataSource() but I do not know how to use it, because the data I need to delete is a qgis_project (there is no geometry).

PolyGeo
  • 65,136
  • 29
  • 109
  • 338
zlikotp
  • 24
  • 2
  • 19

1 Answers1

5

The recommended way of removing a QGIS project stored in a database is this:

  1. Build a proper uri

    For PostgreSQL, something like:

    'postgresql://user:password@localhost:5432?sslmode=disable&dbname=my_db&schema=my_schema&project=my_pg_project'
    

    Note the project=my_pg_project at the end of the uri.

  2. Get the corresponding project storage object

    storage = QgsApplication.projectStorageRegistry().projectStorageFromUri(uri)
    
  3. Remove the project

     storage.removeProject(uri)
    

Related:

Germán Carrillo
  • 36,307
  • 5
  • 123
  • 178