Skip to content

Commit

Permalink
Modification Postgis, Exception et uniqueValues
Browse files Browse the repository at this point in the history
  • Loading branch information
Gustry committed Jun 12, 2024
1 parent cb8f69c commit d77104f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
19 changes: 11 additions & 8 deletions docs/postgis.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ Il s'agit d'un package totalement indépendant de QGIS.
Exemple pour récupérer les tables présentes dans une base de données à l'aide de SQL

```python
import psycopg2
import psycopg

inspect_schema = "mon_schema"
connection = psycopg2.connect(

connection = psycopg.connect(
user="docker", password="docker", host="db", port="5432", database="gis"
)
cursor = connection.cursor()
Expand All @@ -35,20 +36,22 @@ metadata = QgsProviderRegistry.instance().providerMetadata('postgres')
connection = metadata.findConnection("nom de la connexion PG dans votre panneau")

# Faire une requête SQL (ou plusieurs)
results = connection.executeSql("SELECT * FROM schema.table;")
# Besoin d'échapper en utilisant "" si votre schéma ou table comporte des majuscules
results = connection.executeSql("SELECT * FROM \"schema\".\"table\";")
print(results)

# Créer un schéma
connection.createSchema("mon_nouveau_schema")

# Lister les tables
connection.tables("un_schema")
print(connection.tables("un_schema"))

# Afficher une table dans QGIS
connection.tableUri("schema", "table")
# Afficher une table dans QGIS, cela retourne une chaîne de caractère
# permettant de faire une source de données pour une QgsVectorLayer
print(connection.tableUri("schema", "table"))

layer = QgsVectorLayer(connection.tableUri("schema", "table"), "Ma table", "postgres")
layer.loadDefaultStyle() # Si un style par défaut existe dans votre base PG
layer.loadDefaultStyle() # Si un style par défaut existe dans votre base PostgreSQL, avec la table layer_styles
QgsProject.instance().addMapLayer(layer)

# Charger le résultat d'un SELECT
Expand All @@ -57,7 +60,7 @@ uri = QgsDataSourceUri(connection.uri())
uri.setTable('(SELECT * FROM schema.table)')
uri.setKeyColumn('uid')

# Avec une geom
# Avec une geom si besoin
uri.setGeomColumn('geom')

layer = QgsVectorLayer(uri.uri(), 'Requête SELECT', 'postgres')
Expand Down
19 changes: 18 additions & 1 deletion docs/selection-parcours-entites.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,14 @@ for dept in depts:
print(" → OK")
```

Si l'on souhaite parcourir automatiquement les départements existants, on peut récupérer les valeurs uniques. Pour cela,
il faut modifier deux lignes :

```python
index = layer.fields().indexFromName("INSEE_DEP")
for dept in layer.uniqueValues(index):
```

## Boucler sur les entités à l'aide d'une expression

L'objectif est d'afficher dans la console le nom des communes dont la population ne contient pas `NC`.
Expand Down Expand Up @@ -239,7 +247,16 @@ recommandé car il masque d'autres erreurs :
try:
10 / 2
except Exception:
print('Ceci est une division par zéro !')
print('Erreur inconnue')
```

```python
try:
10 / 0
except ZeroDivisionError:
print('Erreur, division par 0')
except Exception:
print('Erreur inconnue')
```

Il existe d'autres mots-clés en Python pour les exceptions comme `finally:` et `else:`.
Expand Down

0 comments on commit d77104f

Please sign in to comment.