【问题标题】:Parameterized query for MySQL in RStudioRStudio 中 MySQL 的参数化查询
【发布时间】:2019-09-05 23:00:48
【问题描述】:

我想从 RStudio 在 MySQL 数据库中运行参数化查询。

就像有一个表,比如TEST,其中包含姓名和年龄列。我想从 TEST where age > 30 获取数据。我可以使用paste() 来构建查询,但我希望将值 30 作为参数。

所以我尝试了以下代码:

> myQ<-dbSendQuery(conn,"SELECT * FROM TEST WHERE age > ?")
> dbBind(myQ,list(30))
> dbFetch(myQ)

但是在第一行之后它给出了以下错误:

.local(conn, statement, ...) 中的错误:无法运行语句: 您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近 '?'在第 1 行

谁能帮我解决这个问题?

编辑 1

我可以使用下面的代码实现这一点,但我不想要这个:

> age<-30
> myQ<-dbSendQuery(conn,paste("SELECT * FROM TEST WHERE age >",age))
> dbFetch(myQ)

有什么方法可以达到我的要求吗?

编辑 2

见下面的截图,参考去这个link

【问题讨论】:

  • this重复
  • 不,这不是重复的,请仔细阅读我的问题。在那个问题中,它适用于 SQL Server,我使用的是 MySQL。而且解决方案使用了paste(),我不要paste()。
  • sprintf("SELECT * FROM TEST WHERE age &gt; %s", 30)?

标签: mysql r dbi rmysql


【解决方案1】:

您可能正在使用旧的“DBI”接口RMySQL::MySQL() 作为DBI::dbConnect() 的驱动程序。当我切换到建议的 RMariaDB::MariaDB() 驱动程序时,您为我清除了错误。根据您的屏幕截图,DBI 文档确实暗示了 RMySQL 驱动程序。

【讨论】:

    猜你喜欢
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    相关资源
    最近更新 更多