从 MySQL 数据库视图中提取数据

问题描述 投票:0回答:1

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

任何帮助将不胜感激!

mysql r view odbc
1个回答
0
投票

看起来这与您用于

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')
© www.soinside.com 2019 - 2024. All rights reserved.