使用 R 变量向 RMySQL 中的 table 发送查询
Sending Queries to a table in RMySQL, using R variables
我正在尝试将我在 R 中创建并存储在数组中的数据写入 MySQL table。目前我就是这样做的,
for(z in 1:60){
dbSendQuery(
mydb,
"insert into minutely_predictions(id,server_pred, server_hi, server_lo, os_pred, os_hi, os_lo, sessions_id) values(server__id,server_pred[i],server_hi[i],server_lo[i],os_pred[i],os_hi[i],os_lo[i],sesh_id)"
)
}
我收到 MySQL 语法错误,有没有办法将我试图从 R 传递的变量传递到 MySQL?
谢谢。
我能够通过使用函数 sprintf 并以这种方式存储变量来修复它,希望这可以在将来帮助其他人。
queryform = "insert into table(parameters) values('%d' .....)"
query = sprintf(queryform, value[1])
send = dbSendQuery(mydb,query)
考虑参数化的最佳实践,避免将变量字符串连接或插值到 SQL 语句。
# PREPARED STATEMENT WITH QMARK PLACEHOLDERZ
sql <- "insert into minutely_predictions(
id, server_pred, server_hi, server_lo,
os_pred, os_hi, os_lo, sessions_id)
values (?, ?, ?, ?, ?, ?, ?, ?)"
# ITERATE THROUGH ARRAYS AND BIND PARAMS
for(i in 1:60) {
stmt <- dbSendStatement(mydb, sql)
dbBind(
stmt,
list(
server__id, server_pred[i], server_hi[i], server_lo[i],
os_pred[i], os_hi[i], os_lo[i], sesh_id
)
)
dbClearResult(stmt)
}
注意:以上可能仅在使用首选 RMariaDB
(替换旧版 RMySQL
)时有效。
我正在尝试将我在 R 中创建并存储在数组中的数据写入 MySQL table。目前我就是这样做的,
for(z in 1:60){
dbSendQuery(
mydb,
"insert into minutely_predictions(id,server_pred, server_hi, server_lo, os_pred, os_hi, os_lo, sessions_id) values(server__id,server_pred[i],server_hi[i],server_lo[i],os_pred[i],os_hi[i],os_lo[i],sesh_id)"
)
}
我收到 MySQL 语法错误,有没有办法将我试图从 R 传递的变量传递到 MySQL?
谢谢。
我能够通过使用函数 sprintf 并以这种方式存储变量来修复它,希望这可以在将来帮助其他人。
queryform = "insert into table(parameters) values('%d' .....)"
query = sprintf(queryform, value[1])
send = dbSendQuery(mydb,query)
考虑参数化的最佳实践,避免将变量字符串连接或插值到 SQL 语句。
# PREPARED STATEMENT WITH QMARK PLACEHOLDERZ
sql <- "insert into minutely_predictions(
id, server_pred, server_hi, server_lo,
os_pred, os_hi, os_lo, sessions_id)
values (?, ?, ?, ?, ?, ?, ?, ?)"
# ITERATE THROUGH ARRAYS AND BIND PARAMS
for(i in 1:60) {
stmt <- dbSendStatement(mydb, sql)
dbBind(
stmt,
list(
server__id, server_pred[i], server_hi[i], server_lo[i],
os_pred[i], os_hi[i], os_lo[i], sesh_id
)
)
dbClearResult(stmt)
}
注意:以上可能仅在使用首选 RMariaDB
(替换旧版 RMySQL
)时有效。