mysql - R 到 MySQL 查询

标签 mysql sql r

我在 R 中得到一个数据框来查询 SQL Server 数据库,现在我想循环每一行并将其插入到 MySQL 数据库

尝试使用 dbwritetable 但没有成功

library(RODBC)
library(odbc)
library(RMySQL)

con <- dbConnect(odbc(),
                 Driver = "SQL Server",
                 Server = "XX",
                 Database = "XX",
                 UID = "XX",
                 PWD = "XX",
                 Port = XX)


mydb = dbConnect(MySQL(), user='XX', password='XX', dbname='YY', host='YYY')


resultset <- dbGetQuery(con, "SET NOCOUNT ON
DECLARE @StartDate DateTime
DECLARE @EndDate DateTime
SET @StartDate = dateadd(d,-1,getdate())
SET @EndDate = getdate()
SET NOCOUNT OFF
SELECT …..
LEFT JOIN ... ON ….
LEFT JOIN …. ON x.Key = y.Key
WHERE temp.StartDateTime >= @StartDate")

nrows <- nrow(resultset)
colnames(resultset) <- c("tagName", "date_inserted","value") `

所以在这里我在结果集中得到了结果,但我不知道如何将结果集插入MySQL

    dbWriteTable(mydb, name='data', value=resultset[0,],append=TRUE)

dbReadTable(mydb, "数据")

我希望插入数据,但我不知道它应该是一个 for 循环(每行一个查询)还是如何完成

此图像的更多详细信息:

This is my data set

This is MySQL DB structure

最佳答案

尝试使用RODBCext 包来使用参数化插入。我过去曾使用过以下功能。

这会将记录追加到您的数据库中

library(RODBC)
library(RODBCext)

首先我们需要使用RODBC连接到数据库。

sql.driver  = "MySQL ODBC 5.3 ANSI Driver" # need to figure the version out
sql.server  = "your_server_here"
sql.port    = "3306" # or whatever your port number is
sql.user    = "your_user_name_here"
sql.pass    = "your_password_name_here"
sql.db      = "your_database_name_here"

con.string = paste0("Driver=", sql.driver, ";",
                    "Server=", sql.server, ";",
                    "Port=", sql.port, ";",
                    "Uid=", sql.user, ";",
                    "Pwd=", sql.pass, ";",
                    "Database=", sql.db, ";")

ch = odbcDriverConnect(con.string)

然后这是自定义函数saveTable()。您将需要使用下面定义的特定输入来运行此程序。

saveTable <- function(con, table_name, df) {
  # con = the ODBC connection (e.g., ch)
  # table_name = the SQL database table to append to
  # df = the data.frame() to append

  sql_code = paste("INSERT INTO",table_name,"(",paste(colnames(df),collapse=", "),") VALUES (",paste(rep("?",ncol(df)),collapse=","),")")

  sqlExecute(con, sql_code, df)
}

关于mysql - R 到 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57889906/

相关文章:

mysql - 检查列表是否在表中

mysql - R MYSQL写表删除某些列

r - 从 R 中的多个 JPEG 生成 PDF

Mysql - 选择匹配所有标签的 id

php - 如何显示 "students"表中具有与 "faculty"表相同的 faculty_id 的名称?

php - 2 人游戏的 SQL 数据库结构

php - Laravel 按自定义日期字段排序

SQL查询协助

对于某些数字,R 中的舍入函数并不总是舍入到最接近的偶数

php在mysql中添加songID