首页 > 解决方案 > RSQLite 得到错误:没有这样的表,但显然有表

问题描述

这是一个可重现的示例:

  1. 在本地创建数据库

    conn_test <- DBI::dbConnect(drv = RSQLite::SQLite(), "C:/Users/xxx/Documents/DB_test")
    
  2. 创建表

    DBI::dbWriteTable(conn = conn_test, name = "[Tbl_test]", value = mtcars)
    DBI::dbListTables(conn = conn_test)
    
  3. 得到一张有一些调整的桌子

    DBI::dbGetQuery(conn = conn_test,
                                  statement = "
                                      SELECT *,
                                        CASE
                                          WHEN [cyl] = 6 THEN 1
                                          ELSE 0
                                        END AS TEST_RESULT
                                      FROM [Tbl_test]
                        ;")
    

错误信息:

Error: no such table: Tbl_test

如何解决这个问题?

标签: rsqlite

解决方案


从 table-write 中删除带引号的标识符括号:

conn_test <- DBI::dbConnect(drv = RSQLite::SQLite(), "~/StackOverflow/DB_test")
DBI::dbWriteTable(conn = conn_test, name = "Tbl_test", value = mtcars)
DBI::dbGetQuery(conn = conn_test,
                              statement = "
                                  SELECT *,
                                    CASE
                                      WHEN [cyl] = 6 THEN 1
                                      ELSE 0
                                    END AS TEST_RESULT
                                  FROM [Tbl_test]
                    ;")
#     mpg cyl  disp  hp drat    wt  qsec vs am gear carb TEST_RESULT
# 1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4           1
# 2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4           1
# 3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1           0
# ...snip...

推荐阅读