首页 > 解决方案 > dbWriteTable:如果表名是“READ”(保留字),则会发生错误

问题描述

我正在尝试使用 R 中 DBI 包中的函数将 tibble 上传到 mysql 服务器。

但是,如果表名是“READ”或“READs”,我会遇到错误。

# an simple table
> x <- tibble(x=rep("a",5))

> dbWriteTable(DB, "READ", x, overwrite = TRUE, row.names = FALSE)
Error in .local(conn, statement, ...) : 
  could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ 
( `x` text 
)' at line 1

改成其他名字上传成功,

> dbWriteTable(DB, "READa", x, overwrite = TRUE, row.names = FALSE)
[1] TRUE

我不明白这里的语法错误是什么......

有人可以解释一下吗?

标签: mysqlrdbitibble

解决方案


搜索后,我认为这个问题是重复的,但我发现没有结论的答案。所以我会发布我试图解决问题的内容。

正如评论中所讨论的,“READ”是 MySQL 中的保留字。而且,反引号不能解决函数中的错误dbWriteTable。有趣的是,“READ”使用dbCreateTable.

所以诀窍是用 . 创建表,dbCreateTable然后用dbWriteTable.

这是我尝试过的代码:

dbCreateTable(DB, "READ", table,
               fields = c(Sample_PatientID = "varchar(20)",
                          Sample_Type = "tinyint",
                          Sample_Analytic = "varchar(20)",
                          GeneID = "integer",
                          Value = "decimal(17,10)"))

dbWriteTable(DB, "READ", table, append = TRUE, row.names = FALSE)

# fields is for defining datatype, as field.types in dbWriteTable.

推荐阅读