dbWriteTable записывает только 1 строку data.frame в MySQL Table - PullRequest
1 голос
/ 15 апреля 2020

Начиная с середины марта, dbWriteTable перестал работать правильно и теперь записывает только первую строку data.frame в таблицу MySQL. После этого я обновил MySQL, MySQL Workbench, RStudio, R и все мои пакеты R до последних версий, но без улучшений. Первоначально я думал, что это происходит только при добавлении к таблицам базы данных, но это также происходит при записи во вновь созданные таблицы.

Он не выдает сообщение об ошибке, и dbWriteTable возвращает TRUE, как если бы он был успешным, но только один строка была записана в таблицу MySQL.

Информация о сеансе

 devtools::session_info()
 - Session info --------------------------------------------------------------------------
 setting  value                       
 version  R version 3.6.3 (2020-02-29)
 os       Windows 10 x64              
 system   x86_64, mingw32             
 ui       RStudio                     
 language (EN)                        
 collate  English_United States.1252  
 ctype    English_United States.1252  
 tz       America/Los_Angeles         
 date     2020-04-14                  

 - Packages -------------------------------------------------------------------------

package     *  version    date       source     
- assertthat    0.2.1    2019-03-21  CRAN (R 3.6.0)
- backports     1.1.6    2020-04-05  CRAN (R 3.6.3)
- bit           1.1-15.2 2020-02-10  CRAN (R 3.6.2)
- bit64         0.9-7    2017-05-08  CRAN (R 3.6.2)
- blob          1.2.1    2020-01-20  CRAN (R 3.6.3)
- callr         3.4.3    2020-03-28  CRAN (R 3.6.3)
- cli           2.0.2    2020-02-28  CRAN (R 3.6.3)
- crayon        1.3.4    2017-09-16  CRAN (R 3.5.0)
- DBI         * 1.1.0    2019-12-15  CRAN (R 3.6.3)
- desc          1.2.0    2018-05-01  CRAN (R 3.5.0)
- devtools      2.3.0    2020-04-10  CRAN (R 3.6.3)
- digest        0.6.25   2020-02-23  CRAN (R 3.6.3)
- ellipsis      0.3.0    2019-09-20  CRAN (R 3.6.2)
- fansi         0.4.1    2020-01-08  CRAN (R 3.6.2)
- fs            1.4.1    2020-04-04  CRAN (R 3.6.3)
- glue          1.4.0    2020-04-03  CRAN (R 3.6.3)
- hms           0.5.3    2020-01-08  CRAN (R 3.6.2)
- magrittr      1.5      2014-11-22  CRAN (R 3.5.0)
- memoise       1.1.0    2017-04-21  CRAN (R 3.5.0)
- odbc        * 1.2.2    2020-01-10  CRAN (R 3.6.3)
- pkgbuild      1.0.6    2019-10-09  CRAN (R 3.6.2)
- pkgconfig     2.0.3    2019-09-22  CRAN (R 3.6.2)
- pkgload       1.0.2    2018-10-29  CRAN (R 3.5.1)
- prettyunits   1.1.1    2020-01-24  CRAN (R 3.6.2)
- processx      3.4.2    2020-02-09  CRAN (R 3.6.2)
- ps            1.3.2    2020-02-13  CRAN (R 3.6.2)
- R6            2.4.1    2019-11-12  CRAN (R 3.6.2)
- Rcpp          1.0.4.6  2020-04-09  CRAN (R 3.6.3)
- remotes       2.1.1    2020-02-15  CRAN (R 3.6.2)
- rlang         0.4.5    2020-03-01  CRAN (R 3.6.3)
- rprojroot     1.3-2    2018-01-03  CRAN (R 3.5.0)
- rstudioapi    0.11     2020-02-07  CRAN (R 3.6.2)
- sessioninfo   1.1.1    2018-11-05  CRAN (R 3.5.1)
- testthat      2.3.2    2020-03-02  CRAN (R 3.6.3)
- usethis       1.6.0    2020-04-09  CRAN (R 3.6.3)
- vctrs         0.2.4    2020-03-10  CRAN (R 3.6.3)
- withr         2.1.2    2018-03-15  CRAN (R 3.5.0)

[1] D:/R_HOME/library
[2] D:/R_HOME/R-3.6.3/library

Воспроизводимый код

library(DBI)

#Connect to MySQL database
con  <- dbConnect(odbc::odbc(),
            dsn =mydsn, 
            database = mydatabase, 
            uid=myId, 
            pwd= myPassword)

dbListTables(con)

x <- dbWriteTable(con, "mtcars", mtcars, temporary = FALSE)

dbReadTable(con, "mtcars")

x2 <- dbWriteTable(con, "mtcars", mtcars[2:3, ], append=TRUE, temporary = FALSE)

dbReadTable(con, "mtcars")

dbListTables(con)
dbExistsTable(con, "mtcars")

dbDisconnect(con)


После x <- dbWriteTable(con, "mtcars", mtcars, temporary = FALSE) x = TRUE

После следующего dbReadTable(con, "mtcars")

Вывод:

row_names mpg cyl disp hp drat wt qsec vs am gear carb

1 Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4

После x2 <- dbWriteTable(con, "mtcars", mtcars[2:3, ], append=TRUE, temporary = FALSE) x2 = ИСТИНА

После следующего dbReadTable(con, "mtcars")

Вывод:

row_names mpg cyl disp hp drat wt qsec vs am gear carb

1 Mazda RX4 21 6 160 110 3.9 2.62 16.46 0 1 4 4

2 Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4

Проблема выглядит так просто c, и я удалил и переустановил R, RStudio и DBI, odb c, а также любой другой пакет, который, как я думал, может зависеть от них, но я не добился успеха , Все пакеты актуальны.

R версия 3.6.3 (2020-02-29)

MySQL Workbench 8.0 версия 8.0.19

MySQL Workbench 8.0 версия 8.0.19 Build 15713499 Сообщество CE (64 бита)

Windows 10 Pro 64-битная версия: 18362.720

Процессор Intel® R Core ™ TM i7-7700 ЦП @ 3,60 ГГц

Системная память 16 ГБ

Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 17 апреля 2020

@ Брайан Большое спасибо за ваше предложение. Потребовалось некоторое время, чтобы RMariaDB установил связь с MySQL, не выдавая ошибку caching_sha2_password, но RMariaDB наконец-то смог подключиться, и dbWriteTable удалось успешно записать полные данные.frames в MySQL. Похоже, проблема должна быть odb c.

...