dbWriteTable: ошибка возникает, если имя таблицы "READ" (зарезервированное слово) - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь загрузить тиббл на сервер mysql, используя функцию из пакета DBI в R.

, однако, я сталкиваюсь с ошибкой, если имя таблицы - «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

Я не понимаю, в чем здесь синтаксическая ошибка ...

Может ли кто-нибудь объяснить это пожалуйста?

1 Ответ

0 голосов
/ 04 августа 2020

После поисков я думаю, что этот вопрос дублируется, но я не нашел окончательного ответа. Итак, я опубликую то, что я пытался решить проблему.

Как обсуждалось в комментариях, «ЧИТАТЬ» - это зарезервированное слово в 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.
...