代码之家  ›  专栏  ›  技术社区  ›  MrH

如何在R中对数据库连接使用字符向量进行筛选?

  •  1
  • MrH  · 技术社区  · 8 年前

    编辑:我在下面的例子中发现了我的错误。我打错了 stored_group 在过滤器中。它按预期工作。

    我想使用字符值来筛选数据库表。我用 dplyr 函数直接作用于连接对象。请看下面我的步骤。

    我连接到我的MariaDB数据库:

    con <- dbConnect(RMariaDB::MariaDB(), 
                     dbname = mariadb.database,
                     user = mariadb.username,
                     password = mariadb.password,
                     host = mariadb.host,
                     port = mariadb.port)
    

    然后我想对数据库中的表使用一个过滤器,通过使用 dplyr公司 直接在上面的连接上编码:

    stored_group <- "some_group"
    con %>% 
      tbl("Table") %>% 
      select(id, group) %>%
      filter(group == stored_group) %>%
      collect()
    

    我说错了 Unknown column 'stored_group' in 'where clause' . 所以我用 show_query() 这样地:

    stored_group <- "some_group"
    con %>% 
      tbl("Table") %>% 
      select(id, group) %>%
      filter(group == stored_group) %>%
      show_query()
    

    我得到了:

    <SQL>
    SELECT `id`, `group`
    FROM `Table`
    WHERE (`group` = `stored_group`)
    

    在翻译中, 存储组 在R中被视为列名而不是值。如何防止这种情况?

    对于R中的普通数据帧,这是有效的。比如:

    stored_group <- "some_group"
    data %>% 
      select(id, group) %>%
      filter(group == stored_group)
    

    我刚刚测试了下面的解决方案,它是有效的。但我的数据库表会增长。我想在收集之前直接在数据库中筛选。

    stored_group <- "some_group"
    con %>% 
      tbl("Table") %>% 
      select(id, group) %>%
      collect() %>%
      filter(group == stored_group)
    

    有什么建议吗?

    0 回复  |  直到 8 年前
    推荐文章