我正在尝试使用 RStudio 从 MySQL 数据库中的视图访问数据。当我连接到数据库时,它会在“连接”窗口中显示所有视图的名称。我什至可以使用
dbListTables()
函数返回每个视图的名称。
但是,当我尝试运行
tbl()
函数时,出现以下错误:
Error: nanodbc/nanodbc.cpp:1655: HY000: [MySQL][ODBC 8.0(a) Driver][mysqld-5.5.5-10.3.34-
MariaDB-log]Prepared statement needs to be re-prepared
<SQL> 'SELECT *
FROM `database_view` AS `q01`
WHERE (0 = 1)'
这是我已经加载的包:
library(tidyverse)
library(dbplyr)
library(DBI)
library(odbc)
这是我的
tbl()
代码:
tbl(con, "database_view")
这是我的连接代码(我用括号中的占位符替换了实际值):
con <- DBI::dbConnect(odbc::odbc(),
Driver = "MySQL ODBC 8.0 ANSI Driver",
Server = "[Server]",
UID = "[UID]",
PWD = "[PWD]",
Port = 3306,
Database = "[Database]")
任何帮助将不胜感激!
看起来这与您用于
DBI
包的后端有关。 RMariaDB::MariaDB()
后端似乎不适用于视图。幸运的是,RMySQL::MySQL()
确实有效,所以你应该可以使用它。
既然您设置了 ODBC,我猜您正在使用 Maria DB ODBC 驱动程序。如果您重新配置 ODBC 连接以使用 MySQL 驱动程序,应该可以解决该问题。
或者,直接连接数据库会少一点工作量。您只需安装
RMySQL
软件包并使用下面的代码即可。
# load necessary libraries
library(DBI)
# unable to fetch data from views using the RMariaDB package
mysql <-
DBI::dbConnect(
RMariaDB::MariaDB(),
host = Sys.getenv('host'),
user = Sys.getenv('uid'),
password = Sys.getenv('pwd')
)
data <- dbGetQuery(mysql, 'select * from view')
#> Error: Prepared statement needs to be re-prepared [1615]
# but it works with the RMySQL package
mysql <-
DBI::dbConnect(
RMySQL::MySQL(),
host = Sys.getenv('host'),
user = Sys.getenv('uid'),
password = Sys.getenv('pwd')
)
data <- dbGetQuery(mysql, 'select * from view')