Extract Data from a MySQL Database视图

ezykj2lf  于 11个月前  发布在  Mysql
关注(0)|答案(1)|浏览(70)

我尝试使用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]")


任何帮助将不胜感激!

uqdfh47h

uqdfh47h1#

看起来这和你为DBI包使用的后端有关。RMariaDB::MariaDB()后端似乎不能处理视图。幸运的是,RMySQL::MySQL()可以工作,所以你应该可以使用它。
既然你是用ODBC设置的,我猜你使用的是Maria DB ODBC驱动程序。如果你重新配置你的ODBC连接使用MySQL driver,它应该能解决这个问题。
或者,直接连接到数据库会少一点工作量。你可以安装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')

字符串

相关问题