是否有一个「;“执行官”;R和RSQLite的模拟?

是否有一个「;“执行官”;R和RSQLite的模拟?,r,sqlite,R,Sqlite,问题: 有没有一种方法可以使用r将许多行(20k以下)插入SQLite3表 更多工作: 我看过类似的答案,但它们似乎没有说明这一点: 有一个“c命令”,但不是“R” SQLite3帮助本身似乎没有给出前进的方向: Python具有“”使大型插入快速运行。RSQLite或DBI中是否有“R”模拟?有没有其他我应该使用的图书馆 提前感谢。dbWriteTable有一个append参数,允许添加到表中。使用内置的BOD数据框: library(RSQLite) con <-

问题
有没有一种方法可以使用r将许多行(20k以下)插入SQLite3表

更多工作
我看过类似的答案,但它们似乎没有说明这一点:

有一个“c命令”,但不是“R”

SQLite3帮助本身似乎没有给出前进的方向:

Python具有“”使大型插入快速运行。RSQLite或DBI中是否有“R”模拟?有没有其他我应该使用的图书馆


提前感谢。

dbWriteTable
有一个append参数,允许添加到表中。使用内置的
BOD
数据框:

library(RSQLite)
con <- dbConnect(SQLite())
dbWriteTable(con, "BOD", BOD) # create the table

dbWriteTable(con, "BOD", 2*BOD, append = TRUE) # add some more rows
库(RSQLite)

con在data.frame或tibble中迭代行并在SQLite表中逐个插入每一行是一种正确的方法。使用
dbWriteTable
的简单解决方案在表参数化和
INSERT
条件中没有提供太多的粒度,这通常是需要的(例如设置主键和外键)

示例,时间序列存储在TIBLE中,包含两列“时间”和“值”

  • 创建表

  • con为什么不
    ?dbsendpresparedquery
    ?@joran-帮助文档中没有太多关于准备好的查询的内容。你能给我指一下或者给我一个基本的例子吗?这肯定比准备好的查询更简单。这对完整的表有效吗?整洁的让我来测试一下。(编辑)-你太棒了。谢谢你@G.格罗森迪克。
    con <- DBI::dbConnect(RSQLite::SQLite(), db_path)
    
    table_name <- 'my_ts'
    
    com <- as.character(stringr::str_glue("CREATE TABLE IF NOT EXISTS '{table_name}' \
                                         ('times' TEXT NOT NULL, 'values' REAL, PRIMARY KEY(times));"))
    
    DBI::dbWithTransaction(con, {
         DBI::dbExecute(con, com)
        })
    
    
    tb_times <- as.character(tb[['times']])
    tb_values <- as.numeric(tb[['values']])
    
    for (i in seq_along(index(tb))) {
        com <- as.character(stringr::str_glue("INSERT OR REPLACE INTO '{table_name}'(times, 'values') \
                                            VALUES('{tb_times[i]}', {tb_values[i]});"))
        DBI::dbWithTransaction(con, {
            DBI::dbExecute(con, com)
        })
    }
    
    RSQLite::dbDisconnect(con)