Skip to content
Snippets Groups Projects
Commit c30f15a1 authored by ronan.vignard's avatar ronan.vignard
Browse files

Ajout du paramètre host et modification de l'exemple

parent e7eb92e4
Branches
Tags v1.0.0-RC10
Loading
#' Insère un dataframe dans une table existante
#'
#' @description Fonction pour insérer les données d'un dataframe dans une table
#' existante d'une base de données PostgreSQL, en vérifiant la correspondance
#' de la structure entre le dataframe et la table. Si la correspondance est
#' @description Fonction pour insérer les données d'un dataframe dans une table
#' existante d'une base de données PostgreSQL, en vérifiant la correspondance
#' de la structure entre le dataframe et la table. Si la correspondance est
#' vérifiée, les données sont insérées dans la table. Si la correspondance
#' n'est pas vérifiée les différences de strcture entre le dataframe et la table
#' sont listées.
#'
#' @param host Hôte de la base de données PostgreSQL.
#' @param database Nom de la base de données.
#' @param schema Le schéma de la table dans la base de données.
#' @param table Le nom de la table existante dans la base de données.
#' @param dataframe Le dataframe contenant les données à insérer.
#' @param role Le rôle du propriétaire de la table.
#'
#'
#' @return Le nombre de lignes insérées dans la table en base.
#'
#' @importFrom datalibaba connect_to_db
......@@ -23,54 +24,61 @@
#' @export
#' @examples
#' \dontrun{
#' # Création d'un dataframe à partir d'un fichier XLSX
#' data_ars_2022 <- collectr::import_xlsx(
#' filepath = "C:\\TEMP\\Nitrates_2022.xlsx",
#' sheet = 1,
#' row = 1)
#'
#' # Ajout d'un champs de géométrie
#' data_ars_2022 <- data_ars_2022 |>
#' dplyr::select(-coord_x,-coord_y) |>
#' dplyr::mutate(eligible_ades = rep(NA, dplyr::n()))
#'
#' # Créer une dataframe source
#' source <- data.frame(
#' id = 6:10,
#' name = c("Alice", "Bob", "Charlie", "David", "Eve"),
#' birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"),
#' value = rnorm(5)
#' )
#' # Créer une table target dans le schéma public de la base collectr
#' create_dummy(host = "localhost",
#' database = "collectr",
#' schema = "public",
#' table = "target",
#' pk = "id",
#' id_range = "1:5",
#' role = "runner")
#' # Utilisation de la fonction insert_into_table()
#' insert_into_table(database = "si_eau",
#' schema = "nitrates",
#' table = "nitrate_data_analyse_ars_test",
#' dataframe = data_ars_2022,
#' role = "admin")
#' insert_into_table(host = "localhost",
#' database = "collectr",
#' schema = "public",
#' table = "target",
#' dataframe = source,
#' role = "runner")
#' }
insert_into_table <- function(database, schema, table, dataframe, role) {
insert_into_table <- function(host, database, schema, table, dataframe, role) {
# Se connecter à la base de données PostgreSQL
connexion <- datalibaba::connect_to_db(db = database,
user = role,
connexion <- datalibaba::connect_to_db(server = host,
db = database,
user = role,
ecoSQL = FALSE)
# Vérifier si la table existe dans la base de données
if (!table_exists(database = database, schema = schema, table = table, role = role)) {
if (!table_exists(host = host, database = database, schema = schema,
table = table, role = role)) {
stop("La table sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.")
}
# Vérifier si les attributs correspondent
if (!check_structure_table(database = database, schema = schema,
table = table, dataframe = dataframe,
# Vérifier si les attributs correspondent
if (!check_structure_table(host = host, database = database, schema = schema,
table = table, dataframe = dataframe,
role = role)) {
return(FALSE)
}
# Utiliser sqlAppendTable pour préparer la requête d'insertion
insert_query <- DBI::sqlAppendTable(connexion,
DBI::Id(schema = schema, table = table),
dataframe,
row.names = FALSE)
DBI::Id(schema = schema, table = table),
dataframe,
row.names = FALSE)
# Exécuter la requête d'insertion
result <- DBI::dbExecute(connexion, insert_query)
# Se déconnecter de la base de données
DBI::dbDisconnect(connexion)
# Renvoyer le nombre de lignes insérées
return(result)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment