【问题标题】:Leading numbers in table name with dbWriteTable (RSQLite) causes error带有 dbWriteTable (RSQLite) 的表名中的前导数字会导致错误
【发布时间】:2023-03-30 11:29:01
【问题描述】:

我正在尝试使用 RSQLite 将表写入数据库:

library(RSQLite)

#Create SQL Database
dbfile <- "Testdb.db"
sqlite <- dbDriver("SQLite")
SQLiteChannel <- dbConnect(sqlite, dbfile)

这很好用:

dbWriteTable(SQLiteChannel,name = "mtcars",value = mtcars)

> head(dbReadTable(SQLiteChannel,"mtcars"))
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

但是,如果我在表名中添加前导数字:

dbWriteTable(SQLiteChannel,name = "2015_mtcars",value = mtcars)

Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: unrecognized token: "2015_mtcars"

据我所知,sqlite 的表名中允许使用前导数字,但文档中的所有示例都没有前导数字。

知道发生了什么,或者我如何使用dbWriteTable 以这种方式命名我的表?

注意:在运行此代码之前,数据库和表并不存在,因此它应该是完全可重现的。

【问题讨论】:

    标签: r sqlite


    【解决方案1】:

    以数字开头的表名是非标准的,因此需要用括号括起来。

    dbWriteTable(SQLiteChannel, name = "[2015_mtcars]",value = mtcars)
    [1] TRUE
    

    What are valid table names in SQLite? 中有更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多