【问题标题】:dbWriteTable only writes 1 row of data.frame to MySQL TabledbWriteTable 仅将 1 行 data.frame 写入 MySQL 表
【发布时间】:2020-07-27 20:25:37
【问题描述】:

从 3 月中旬开始,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 &lt;- dbWriteTable(con, "mtcars", mtcars, temporary = FALSE) x = 真

在以下之后 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

这个问题看起来很基本,我已经卸载并重新安装了 R、RStudio 和 DBI、odbc,以及我认为可能依赖于这些的任何其他包,但我没有成功。所有软件包都是最新的。

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 专业版 64 位版本:18362.720

Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz

系统内存 16GB

任何建议将不胜感激。

【问题讨论】:

  • 如果您使用RMariaDB::MariaDB() 代替odbc::odbc(),问题是否仍然存在?驱动程序应该可以互换,但乍一看我看不出任何其他问题。
  • @Brian 我尝试使用 RMariaDB::MariaDB() 但我不断收到有关“caching-sha2-password”的错误消息,我还没有想出如何解决这个问题。

标签: mysql r odbc dbi


【解决方案1】:

@Brian 非常感谢您的建议。花了一段时间让 RMariaDB 与 MySQL 进行通信而没有给出caching_sha2_password 错误,但 RMariaDB 终于能够连接并且 dbWriteTable 成功地能够将完整的 data.frames 写入 MySQL。看来问题一定是odbc。

【讨论】:

  • 我即将踏上类似的旅程,如果您能提供有关如何避免 cache_sha2_password 错误的详细信息,将不胜感激。也许发布可重现代码的工作版本?
【解决方案2】:

以下是我解决caching_sha2_password 错误的方法。

首先,我在 Notepad++ 中打开了 C:/~/MySQL/MySQL Server 8.0/my.ini。

然后我更改了以下行:
来自:default_authentication_plugin=caching_sha2_password
至:default_authentication_plugin=mysql_native_password
并保存。

然后我跑了: CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost'; 
FLUSH PRIVILEGES; 
SELECT * FROM mysql.user;

结果显示'newuser'@'localhost'拥有所有权限。

我测试了它,它是成功的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2011-09-12
    • 2021-10-26
    • 2014-05-24
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多