Skip to content
Snippets Groups Projects
Commit 13cfdd17 authored by mael.theuliere's avatar mael.theuliere
Browse files

Premières fonctions :

connect_to_db,list_schemas,list_tables,get_data,post_data
parent 4fc42a6f
Branches
Tags
No related merge requests found
...@@ -3,16 +3,22 @@ Title: Interface De Connexion a Une Base Posgres ...@@ -3,16 +3,22 @@ Title: Interface De Connexion a Une Base Posgres
Version: 0.0.0.9000 Version: 0.0.0.9000
Authors@R: Authors@R:
c(person(given = "Maël", c(person(given = "Maël",
family = "Theulière", family = "Theulière",
role = c("aut"), role = "aut",
email = "mael.theuliere@developpement-durable.gouv.fr"), email = "mael.theuliere@developpement-durable.gouv.fr"),
person(given = "Juliette", person(given = "Juliette",
family = "Engelaere Lefebvre", family = "Engelaere Lefebvre",
role = c("aut", "cre"), role = c("aut", "cre"),
email = "juliette.engelaere-lefebvre@developpement-durable.gouv.fr") email = "juliette.engelaere-lefebvre@developpement-durable.gouv.fr"))
) Description: Interface de connexion a une base Posgres : lecture,
Description: Interface de connexion a une base Posgres : lecture, ecriture, consultation des shemas, gestion des types de donnees de R. ecriture, consultation des shemas, gestion des types de donnees de R.
License: GPL (>= 3) License: GPL (>= 3)
Imports:
attempt,
DBI,
glue,
odbc,
RPostgreSQL
Encoding: UTF-8 Encoding: UTF-8
LazyData: true LazyData: true
Roxygen: list(markdown = TRUE) Roxygen: list(markdown = TRUE)
......
# Generated by roxygen2: do not edit by hand # Generated by roxygen2: do not edit by hand
export(connect_to_db)
export(get_data)
export(list_schemas)
export(list_tables)
export(post_data)
importFrom(DBI,dbConnect)
importFrom(DBI,dbDriver)
importFrom(DBI,dbGetQuery)
importFrom(DBI,dbReadTable)
importFrom(DBI,dbWriteTable)
importFrom(RPostgreSQL,postgresqlpqExec)
importFrom(attempt,message_if)
importFrom(attempt,stop_if)
importFrom(attempt,stop_if_not)
importFrom(glue,glue)
importFrom(odbc,odbc)
# datalibaba 0.0.0.9000
- ajout de la fonction `connect_to_db()' : Connection au serveur datamart.
- ajout de la fonction `list_schemas()' : Liste les schémas sur un connecteur.
- ajout de la fonction `list_tables()' : Liste les tables sur un schéma d'un connecteur.
- ajout de la fonction `post_data()' : Chargement d'un dataset sur le serveur
- ajout de la fonction `get_data()' : Import d'un dataset du serveur.
* Added a `NEWS.md` file to track changes to the package.
#' Connection au serveur datamart
#'
#' @param db la database sur laquelle se connecter
#' @param user le profil utilisateur avec lequel se connecter : does ou dreal
#' @param user_id le nom utilisateur avec lequel se connecter tel que renseigné dans votre renviron
#' @param user_pwd le mot de passe avec lequel se connecter tel que renseigné dans votre renviron
#' @return La fonction créé un connecteur pour se connecter à la base posgresql du serveur
#' @importFrom DBI dbDriver dbConnect
#' @importFrom odbc odbc
#' @importFrom glue glue
#' @export
#'
#' @examples
#' \dontrun{
#' connect_to_datamart()
#' }
connect_to_db <- function(db="datamart",
user="does",
user_id=paste0("user_",user),
user_pwd = paste0("pwd_",user)){
# con <- DBI::dbConnect(odbc::odbc(),
# .connection_string = glue::glue("Driver={PostgreSQL Unicode(x64)};Server=$Sys.getenv('server')$;\nDatabase=$db$;\nUID=$Sys.getenv(user_id)$;\nPWD=$Sys.getenv(user_pwd)$;\nPort=$Sys.getenv('port')$;",.open = "$",.close="$"),timeout = 10,
# encoding = "UTF-8")
drv <- DBI::dbDriver("PostgreSQL")
con <- DBI::dbConnect(drv,
dbname=db,
host=Sys.getenv("server"),
port=Sys.getenv("port"),
user=Sys.getenv(user_id),
password=Sys.getenv(user_pwd)
)
return(con)
}
#' Import d'un dataset du serveur
#'
#' @param con Le connecteur de classe PosgreSQLConnection.
#' @param schema Le nom du schema sur le serveur de données.
#' @param table Le nom de la table sur le serveur de données.
#'
#' @importFrom attempt stop_if
#' @importFrom DBI dbReadTable
#' @importFrom RPostgreSQL postgresqlpqExec
#' @return Un dataframe.
#' @export
get_data <- function(con = NULL,
schema = NULL,
table = NULL) {
attempt::stop_if(con, is.null, msg = "con n'est pas renseign\u00e9")
attempt::stop_if(schema, is.null, msg = "schema n'est pas renseign\u00e9")
attempt::stop_if(table, is.null, msg = "table n'est pas renseign\u00e9")
RPostgreSQL::postgresqlpqExec(con, "SET client_encoding = 'windows-1252'")
data <- DBI::dbReadTable(con, c(schema,table))
return(data)
}
#' Lister les schémas sur un connecteur
#'
#' @param con Le connecteur de classe PosgreSQLConnection.
#' @return Un vecteur de caractère avec les schémas présents sur le connecteur con.
#' @export
#' @importFrom DBI dbGetQuery
list_schemas <- function(con) {
all_schemas <- DBI::dbGetQuery(con, "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA")
return(all_schemas$schema_name)
}
#' Lister les tables sur un schéma d'un connecteur.
#'
#' @param con Le connecteur de classe PosgreSQLConnection.
#' @param schema Le nom du schéma sur le serveur de données.
#' @return Un vecteur de caractère avec les tables présentes sur le schéma schema du connecteur con.
#' @importFrom attempt stop_if stop_if_not
#' @importFrom DBI dbGetQuery
#' @importFrom glue glue
#' @export
list_tables <- function(con,schema) {
attempt::stop_if(con, is.null, msg = "con n'est pas renseign\u00e9")
attempt::stop_if(schema, is.null, msg = "schema n'est pas renseign\u00e9")
attempt::stop_if_not(schema, ~ .x %in% list_schemas(con), msg = glue::glue("{schema} n'existe pas"))
all_tables <- DBI::dbGetQuery(conn = con,
statement = glue::glue("SELECT table_name FROM information_schema.tables
WHERE table_schema='{schema}'"))
return(all_tables$table_name)
}
#' Chargement d'un dataset sur le serveur
#'
#' @return La fonction charge le dataset sur le serveur.
#'
#' @param con Le connecteur de classe PosgreSQLConnection.
#' @param data Un dataframe a importer.
#' @param schema Le nom du schéma sur le serveur de données.
#' @param table Le nom de la table sur le serveur de données.
#' @param overwrite TRUE si on veut écraser le fichier déjà présent.
#'
#' @importFrom attempt stop_if stop_if_not message_if
#' @importFrom DBI dbWriteTable
#' @importFrom glue glue
#' @export
post_data <- function(con,
data = NULL,
schema = NULL,
table = NULL,
overwrite = FALSE
) {
attempt::stop_if(con, is.null, msg = "con n'est pas renseign\u00e9")
attempt::stop_if_not(deparse(substitute(con)), exists, msg = glue::glue("le connecteur {con} n'exsiste pas"))
attempt::stop_if(data, is.null, msg = "data n'est pas renseign\u00e9")
attempt::stop_if_not(data, is.data.frame, msg = glue::glue("le dataframe {data} n'exsiste pas"))
attempt::stop_if(schema, is.null, msg = "schema n'est pas renseign\u00e9")
attempt::stop_if(table, is.null, msg = "table n'est pas renseign\u00e9")
attempt::stop_if_not(schema, ~ .x %in% list_schemas(con), msg = glue::glue("le schema {schema} n'existe pas"))
attempt::stop_if(table %in% list_tables(con,schema) & !overwrite, msg = glue::glue("La table {table} existe d\u00e9j\u00e0 sur le schema {schema} et le param\u00e8 tre overwrite est \u00e0 FALSE"))
attempt::message_if(table %in% list_tables(con,schema) & overwrite, msg = glue::glue("La table {table} est \u00e9cras\u00e9e sur le schema {schema}"))
DBI::dbWriteTable(con, c(schema,table), data,overwrite = overwrite )
return(invisible(NULL))
}
...@@ -6,3 +6,12 @@ usethis::edit_file("dev_history.R") ...@@ -6,3 +6,12 @@ usethis::edit_file("dev_history.R")
usethis::use_build_ignore('dev_history.R') usethis::use_build_ignore('dev_history.R')
usethis::use_gpl3_license() usethis::use_gpl3_license()
usethis::edit_file('DESCRIPTION') usethis::edit_file('DESCRIPTION')
usethis::user_r("connect_to_db.R")
usethis::user_r("list_schemas.R")
usethis::user_r("list_tables.R")
usethis::user_r("post_data.R")
usethis::user_r("get_data.R")
attachment::att_amend_desc()
devtools::document()
devtools::check()
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/connect_to_db.R
\name{connect_to_db}
\alias{connect_to_db}
\title{Connection au serveur datamart}
\usage{
connect_to_db(
db = "datamart",
user = "does",
user_id = paste0("user_", user),
user_pwd = paste0("pwd_", user)
)
}
\arguments{
\item{db}{la database sur laquelle se connecter}
\item{user}{le profil utilisateur avec lequel se connecter : does ou dreal}
\item{user_id}{le nom utilisateur avec lequel se connecter tel que renseigné dans votre renviron}
\item{user_pwd}{le mot de passe avec lequel se connecter tel que renseigné dans votre renviron}
}
\value{
La fonction créé un connecteur pour se connecter à la base posgresql du serveur
}
\description{
Connection au serveur datamart
}
\examples{
\dontrun{
connect_to_datamart()
}
}
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/get_data.R
\name{get_data}
\alias{get_data}
\title{Import d'un dataset du serveur}
\usage{
get_data(con = NULL, schema = NULL, table = NULL)
}
\arguments{
\item{con}{Le connecteur de classe PosgreSQLConnection.}
\item{schema}{Le nom du schema sur le serveur de données.}
\item{table}{Le nom de la table sur le serveur de données.}
}
\value{
Un dataframe.
}
\description{
Import d'un dataset du serveur
}
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/list_schemas.R
\name{list_schemas}
\alias{list_schemas}
\title{Lister les schémas sur un connecteur}
\usage{
list_schemas(con)
}
\arguments{
\item{con}{Le connecteur de classe PosgreSQLConnection.}
}
\value{
Un vecteur de caractère avec les schémas présents sur le connecteur con.
}
\description{
Lister les schémas sur un connecteur
}
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/list_tables.R
\name{list_tables}
\alias{list_tables}
\title{Lister les tables sur un schéma d'un connecteur.}
\usage{
list_tables(con, schema)
}
\arguments{
\item{con}{Le connecteur de classe PosgreSQLConnection.}
\item{schema}{Le nom du schéma sur le serveur de données.}
}
\value{
Un vecteur de caractère avec les tables présentes sur le schéma schema du connecteur con.
}
\description{
Lister les tables sur un schéma d'un connecteur.
}
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/post_data.R
\name{post_data}
\alias{post_data}
\title{Chargement d'un dataset sur le serveur}
\usage{
post_data(con, data = NULL, schema = NULL, table = NULL, overwrite = FALSE)
}
\arguments{
\item{con}{Le connecteur de classe PosgreSQLConnection.}
\item{data}{Un dataframe a importer.}
\item{schema}{Le nom du schéma sur le serveur de données.}
\item{table}{Le nom de la table sur le serveur de données.}
\item{overwrite}{TRUE si on veut écraser le fichier déjà présent.}
}
\value{
La fonction charge le dataset sur le serveur.
}
\description{
Chargement d'un dataset sur le serveur
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment