« Accès à une BDD PostgreSQL » : différence entre les versions

Page créée avec « Cette page décrit la procédure pour se connecter à une base de données PostGresQL === Paramètres === Pour vous connecter à une base de données, vous allez avoir besoin de connaître les paramètres suivants: **host**: par exemple "blabla.fr" **port**: par exemple 5440 **user**: par exemple "gougougaga" **password**: par exemple "fqsdfa_76864!_zer5678" Ces paramètres vous seront fournis par l'administrateur de la base de données (probablement Samuel!... »
 
mAucun résumé des modifications
 
(6 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
Cette page décrit la procédure pour se connecter à une base de données PostGresQL
Cette page décrit la procédure pour se connecter à une base de données PostgreSQL


=== Paramètres ===
=== Paramètres ===
Ligne 7 : Ligne 7 :
**host**: par exemple "blabla.fr"
**host**: par exemple "blabla.fr"
**port**: par exemple 5440
**port**: par exemple 5440
**database**: par exemple "gougoudb"
**user**: par exemple "gougougaga"
**user**: par exemple "gougougaga"
**password**: par exemple "fqsdfa_76864!_zer5678"
**password**: par exemple "fqsdfa_76864!_zer5678"
Ligne 30 : Ligne 31 :
=== Depuis R ===
=== Depuis R ===


Dans R, il faudra enregistrer les paramètres de connexion dans le fichier .Renviron (qui est situé assez "bas" dans l'arborescence de fichiers, peut-être dans votre Home). Si vous ne connaissez pas son emplacement, vous pouvez utiliser la fonction R ```usethis::edit_r_environ()``` qui vous ouvrira le fichier automatiquement, quel que soit son emplacement.
Dans R, il faudra enregistrer les paramètres de connexion dans le fichier .Renviron (qui est situé assez "bas" dans l'arborescence de fichiers, peut-être dans votre Home).
 
Si vous ne connaissez pas son emplacement, vous pouvez utiliser la fonction R suivante qui vous ouvrira le fichier automatiquement, quel que soit son emplacement.<syntaxhighlight lang="r">
usethis::edit_r_environ()
</syntaxhighlight>Vous allez y enregistrer quelque chose qui ressemble à ceci (ici par exemple pour accéder à la BDD glourb, évidemment avec de fausses valeurs pour les paramètres...):<syntaxhighlight>
GLOURB_HOST="blabla.fr"
GLOURB_PORT="5440"
GLOURB_NAME="glourb"
GLOURB_USER_APP="gougougaga"
GLOURB_PASS_APP="fqsdfa_76864!_zer5678"
</syntaxhighlight>Vous pourrez ensuite créer une connexion "conn" à la BDD à travers la commande suivante
 
<syntaxhighlight lang="r">
  conn <- DBI::dbConnect(RPostgres::Postgres(),
                        host = Sys.getenv("GLOURB_HOST"),
                        port = Sys.getenv("GLOURB_PORT"),
                        dbname = Sys.getenv("GLOURB_NAME"),   
                        user = Sys.getenv("GLOURB_USER_APP"),
                        password = Sys.getenv("GLOURB_PASS_APP"))
 
 
</syntaxhighlight>Cette connexion vous servira alors à accéder aux données.
 
Si la table est de dimension modeste (par exemple sur la base de données GloUrb, wikidata_table qui a environ 40 000 lignes et des colonnes "légères"), vous pouvez la lire directement de cette manière<syntaxhighlight lang="r">
DBI::dbReadTable(name="wikidata_table",conn=conn)
</syntaxhighlight>ou pour une table comprenant des géométries:<syntaxhighlight lang="r">
sf::st_read(dsn=conn,layer="StudyArea_reach_zone")
</syntaxhighlight>Pour des tables plus volumineuses, il peut être pertinent de réaliser un filtre (en SQL) avant de récupérer la donnée (voir section suivante).
 
=== Quelques fonctions utiles en R pour interagir avec la BDD glourb ===
 
Pour interagir avec la BDD glourb depuis R, quelques fonctions utiles sont disponibles dans le package glourbi, disponible ici :https://github.com/lvaudor/glourbi et installable via la commande suivante:
 
<syntaxhighlight lang="r">
devtools::install_github("lvaudor/glourbi")
</syntaxhighlight>
 
Les identifiants uniques de villes dans la BDD glourb sont sous forme de citycode (par exemple "596477_20972" pour Lyon).
 
On peut passer du nom de ville au citycode et inversement par les fonctions suivantes:
 
<syntaxhighlight lang="r">
glourbi::to_citycode("Lyon") # renverra "596477_20972"
glourbi::to_cityname("596477_20972")  # renverra "Lyon"
</syntaxhighlight>
 
 
La fonction glourbi::connect_to_glourb() permet de créer une connexion à la base de données. On peut l'appeler de cette façon (une fois que les paramètres d'accès à la BDD sont enregistrés dans .Renviron)
<syntaxhighlight lang="r">
conn=glourbi::connect_to_glourb()
</syntaxhighlight>
 


Vous allez y enregistrer quelque chose qui ressemble à ceci (ici par exemple pour accéder à la BDD glourb, évidemment avec de fausses valeurs pour les paramètres...):


```
Les fonctions suivantes permettent de filtrer les lignes relatives à une ville donnée dans une table(on lui fournit un citycode en entrée).  
GLOURB_HOST="blabla.fr"
GLOURB_PORT="5440"
GLOURB_NAME="glourb"
GLOURB_USER_APP="gougougaga"
GLOURB_PASS_APP="fqsdfa_76864!_zer5678"
```


Vous pourrez ensuite créer une connexion "conn" à la BDD à travers la commande suivante
Pour une table sans géométries


<syntaxhighlight lang="r">
get_city_tib <- function (name, thisCityCode, conn)
{
    sql <- glue::glue("SELECT * FROM {name} WHERE citycode LIKE ?thisCityCode")
    query <- DBI::sqlInterpolate(conn, sql, thisCityCode = thisCityCode)
    result <- DBI::dbGetQuery(conn = conn, statement = query)
    return(result)
}
</syntaxhighlight>et pour une table avec géométrie:<syntaxhighlight lang="r">
get_city_sf <- function (name, thisCityCode, conn)
{
    sql <- glue::glue("SELECT * FROM {name} WHERE citycode LIKE ?thisCityCode")
    query <- DBI::sqlInterpolate(conn, sql, thisCityCode = thisCityCode)
    result <- sf::st_read(dsn = conn, query = query)
    return(result)
}
</syntaxhighlight>


On peut donc s'en servir de la manière suivante:


<syntaxhighlight lang="r">
conn=connect_to_glourb()
gsw_patches_Denver=get_city_sf(name="gsw_patches",
                              thisCityCode=glourbi::to_citycode("Denver-Aurora"),
                              conn=conn)


txt_page_Douala=get_city_tib(name="txt_page",
                            thisCityCode=glourbi::to_citycode("Douala"),
                            conn=conn)
</syntaxhighlight>
[[Catégorie:Tutoriel]]
[[Catégorie:Tutoriel]]
[[Catégorie:Outils]]
[[Catégorie:Outils]]
[[Catégorie:Données]]
[[Catégorie:Données]]